HƯỚNG DẪN PHÂN TRANG TRONG IOS XỬ DỤNG FILE XIB Các ứng dụng thực tế chúng ta gặp rất nhiều phong cánh chuyển tiếp nhiều view khác nhau.. Ở hướng dẫn này mình sẽ giới thiệu các bạn phân
Trang 1HƯỚNG DẪN PHÂN TRANG TRONG IOS XỬ
DỤNG FILE XIB
Các ứng dụng thực tế chúng ta gặp rất nhiều phong cánh chuyển tiếp nhiều view khác nhau Ở hướng dẫn này mình sẽ giới thiệu các bạn phân trang và chuyển tiếp giữa các trang Như một cuốn truyện được phân ra các trang và chúng ta lướt đến từng trang để đọc!!!
->mục tiêu bài này mình sẽ giúp các bạn :
– Phân trang định hướng theo chiều nào
– Chuyển tiếp giữa các trang
– Các điểm di chuyển theo trang
Bắt đầu nào tạo project mới và đặt tên là XibPageViewController
Tạo 2 file
ChildViewController.xib.Để tạo các viewcontroller con
pageViewController.xib Để tạo viewcontroller chính để load các viewcontroller con
lên
Trang 3Tạo 2 file class để quản lý 2 viewcontroller trên !!!…
ChildViewController: Quản lý ChildViewController.xib
pageViewController Quản lý pageViewController.xib
sau khi tạo nó sẽ trông thế này
Trang 4Xoá đi file mặc định ViewController
Thiết kế giao diện
chọn file ChildViewController.xib
kết nối class quản lý
kết nối view
Trang 5
thay đổi màu background và thêm một label vào
label để phân biệt xem đó là file xib nào khi ta load
ánh xạ label sang class quản lý và đặt tên:
1 @property(weak, nonatomic) IBOutlet UILabel *Screenindex;
Làm việc tương đương với giao diện file pageViewController.xib
nhưng ta chỉ thay đổi color background trông như thế này
Trang 6
Mã nguồn code:
vào ChildViewController.h:
1 @property(weak, nonatomic) IBOutlet UILabel *Screenindex;
2 @property(assign,nonatomic) NSInteger index;
Thêm index để hiển thị lên label đánh dấu xem đang xem file xib nào
ChildViewController.m:
settex lên label:
1 - (void)viewDidLoad {
2 [super viewDidLoad];
3 self.Screenindex.text=[[NSString alloc]initWithFormat:@"Screen %ld",(long)self.index];
4
5 }
Để chuyển tiếp được trang trong ios 5 trở đi có hỗ trợ class UIPageViewController cho phép chuyển tiếp các trang hiệu ứng chuyển ,đánh dấu trang…
vào file pageViewController.h
để sử dụng UIPageViewController đăng đý dataSource
Trang 7và khởi tạo pageViewcontroller
1 @interface pageViewController : UIViewController<UIPageViewControllerDataSource>
2 @property(nonatomic,strong) UIPageViewController *pageController;
UIPageViewController cung cấp 2 phương thức để xem trang trước đó và xem trang ngay sau đó
xem trang trước đó
1 -UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController{
2
3
4 }
xem trang ngay sau nó
1 -UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController{
2
3 }
Ta tạo ra một hàm mới ,Dùng đăng ký file xib nào sẽ được gọi set giá trị cho index của
nó
1 -ChildViewController *)viewControllerAtIndex:(NSUInteger)index{
2 // đăng ký viewcontroller!
3 ChildViewController *childViewcontroller=[[ChildViewController
alloc]initWithNibName:@"ChildViewController"bundle:nil];
4 childViewcontroller.index=index;
5 return childViewcontroller;
6 }
trả về file viewcontroller xib đó.!!!
Kiểm tra màn hình ngay trước màn hình đang xem có tồn tại không và trả về màn hình ngay trước đó
1 -UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerBeforeViewController:(UIViewController *)viewController{
2 NSUInteger index=[(ChildViewController *)viewController index];
3 if(index==0){
4 return nil;
5 }
Trang 86 index ;
7 return [self viewControllerAtIndex:index];
8 }
Kiểm tra màn hình ngay sau màn hình đang xem có tồn tại không và trả về màn hình ngay sau đó
1 -UIViewController *)pageViewController:(UIPageViewController *)pageViewController
viewControllerAfterViewController:(UIViewController *)viewController{
2 NSUInteger index=[(ChildViewController *)viewController index];
3 index++;
4 if(index==5){
5 return nil;
6 }
7 return [self viewControllerAtIndex:index];
8 }
Khi lướt 2 hàm trên mới được gọi
-đăng ký số ô chấm sẽ được hiển thị và bắt đầu từ ô chấm nào!!!
1 -NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController{
2 return 5;
3 }
4 // vi tri o bat dau!!!
5 -NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController{
6 return 0;
7 }
Tạo một mảng để lưu lại các màn hình sẽ hiển thị!!!
1 NSMutableArray *viewControllers;//
Các bạn thêm đoạn mã sau vào Viewdidload mình sẽ giải thích từng dùng lệnh:
1 - (void)viewDidLoad {
2 [super viewDidLoad];
3 viewControllers = [[NSMutableArray alloc]init];
4 // Xác định Kiểu chuyển hướng và xác định hướng chuyển đổi!
5 // Kiểu cuộn trang
6 self.pageController = [[UIPageViewController alloc]
7 initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
8 navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
9 // đăng ký dataSource !!!
10 self.pageController.dataSource = self;
11 // xet full Screen
12 [[self.pageController view] setFrame:[[self view] bounds]];
Trang 913 // tao trang thu 0 va tren index cho no
14 ChildViewController *initialViewController = [self viewControllerAtIndex:0];
15 //
16 [viewControllers addObject:initialViewController];
17 [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
18
19 [self addChildViewController:self.pageController];
20
21 [[self view] addSubview:[self.pageController view]];
22 }
Đầu tiên là đăng ký Kiểu chuyển trang, đăng ký hướng sẽ chuyển đổi
Đăng ký dataSource cho pageViewController
đăng ký fullScreen cho pageViewController
tạo file Viewcontroller.xib thứ 0 để load lên đầu tiên đưaviewcontroller.xib vào mảng để lưu lại…!!!
gán màn hình vựa tạo ra vào self.pageController cho phép chuyển theo
kiểu UIPageViewControllerNavigationDirectionForward
sau đó từ view hiện tại thêm vào self.pageController đã được đăng ký…
cuối cùng cho phép dán lên viêw hiện tại
ok Để load file pageViewController.xib
ta thêm đoạn mã sau!!! ở đây tôi đã hướng dẫn các bạn load file xib!!!
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2 self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
3 UIViewController *controller=[[pageViewController alloc]initWithNibName:@"pageViewController" bundle:nil];
4 self.window.rootViewController=controller;
5 [self.window makeKeyWindow];
6 return YES;
7 }
Chúng ta biên dịch và chạy thử sẽ được kết quả như hình
Trang 10
full code
1 http://www.mediafire.com/download/nyg21azcfkm3112/XibPageViewController.zip