Tôi đã đấu tranh cuối tuần với vấn đề này và đã dành một thời gian dài googling để tìm giải pháp mà không có bất kỳ thành công.UIPageViewController không theo dõi chỉ mục trang
Trường hợp sử dụng của tôi khá đơn giản và tôi không thể tin rằng làm thế nào là khó khăn để làm cho một hành vi tầm thường như vậy hoạt động chính xác.
Ứng dụng của tôi là luồng được phân trang đơn giản, trong đó người dùng vuốt sang trái hoặc sang phải để xem trang tiếp theo hoặc trang trước. Tôi có một UIPageViewController và mỗi trang chứa một UITableView. Tôi đã có vấn đề cố gắng để theo dõi các chỉ số trang bên trong các chức năng viewControllerAfterViewController và viewControllerBeforeViewController vì những lý do giải thích ở đây: PageViewController delegate functions called twice
Tôi đã thử làm theo tất cả các cách giải quyết đề nghị cho vấn đề này (theo dõi các chỉ số bên willTransitionToViewControllers và didFinishAnimating) nhưng điều này không giải quyết được vấn đề của tôi khi các hàm viewController * ViewController vẫn phải trả về một viewController và vì chúng ban đầu được gọi hai lần, viewController trả về đầu tiên dường như là một cái được sử dụng và thứ hai đi qua dường như không để có bất kỳ ảnh hưởng nào.
Mặc dù tôi đã thấy nhiều câu hỏi và blog về vấn đề này, nhưng tôi chưa thấy một ví dụ nào cho thấy cách liên tục trả về khung nhìn chính xác từ chức năng ViewController * ViewController và sẽ rất biết ơn ví dụ. Vấn đề chính tôi không thể nhìn thấy một giải pháp là làm thế nào để xác định chỉ mục tiếp theo bên trong willTransitionToViewControllers nếu tôi chỉ có một viewController duy nhất có nội dung được cập nhật động khi tải trang. Nó có vẻ giống như một vấn đề gà và trứng với tôi; Tôi cần phải tìm ra nội dung để cập nhật trang, nhưng để làm điều đó tôi cần biết chỉ mục của trang là gì (là một phần của nội dung).
Sửa Đây là một phiên bản cất của mã bị ảnh hưởng:
- (void)viewDidLoad {
[super viewDidLoad];
_pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
_pageViewController.dataSource = self;
_pageViewController.delegate = self;
[self.view addSubview:_pageViewController.view];
PageContentViewController *startingPage = [self viewControllerAtIndex:0];
NSArray *viewControllers = @[startingPage];
[_pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
// Don't do any index calculations as the result is inconsistent
return [self viewControllerAtIndex:nextIndex];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
// Don't do any index calculations as the result is inconsistent
return [self viewControllerAtIndex:nextIndex];
}
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers {
// This value never changes because the global _pageViewContentController hasn't been updated yet
nextIndex = [((PageContentViewController *)pendingViewControllers[0]) pageIndex];
}
- (PageContentViewController *)viewControllerAtIndex:(NSUInteger)index {
_pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
_pageContentViewController.pageIndex = index;
_pageContentViewController.title = index;
return _pageContentViewController;
}
Tôi đã sửa lỗi thứ tự mà các chức năng này được gọi và mong chờ sự _pageViewContentController toàn cầu trở nên thông dụng với các dữ liệu chính xác sau khi trang đã được chuyển đổi.
Chỉnh sửa 2 Để cung cấp thêm chi tiết về vấn đề của tôi; mỗi trang của tôi chứa một tiêu đề và một bảng liên kết web. Nhấp vào liên kết sẽ mở một WebViewController để hiển thị trang web đã chọn. Với giải pháp của Yunus bên dưới, mọi thứ hiển thị chính xác (tiêu đề và liên kết xuất hiện như mong đợi) nhưng vấn đề xuất hiện khi nhấp vào liên kết vì điều này tải liên kết từ trang tiếp theo. Có vẻ như giai đoạn dựng hình của trang xảy ra tại thời điểm dữ liệu chính xác, nhưng sau đó khởi động lại bộ điều khiển nội dung trang với dữ liệu không đúng sau khi kết xuất xong, đó là lý do dữ liệu liên kết thực sự sai (mặc dù dữ liệu được hiển thị tốt).
Bạn có thể chia sẻ một số phần liên quan của mã không? –
@YunusErenGuzel - đoạn mã được thêm vào. – bobby
Làm thế nào để bạn mở WebViewController này? Bên trong UIPageViewController hoặc là phương thức hay vv? –