Bu hafta sonu tüm bu problemlerle uğraşıyordum ve uzun zamandır sorunsuz bir şekilde çözüm bulmaya çalıştım.UIPageViewController sayfa dizinini takip etmiyor
Kullanım durumum oldukça basit ve böylesine önemsiz bir davranışın doğru şekilde yapılmasının ne kadar zor olduğuna inanamıyorum.
Uygulamam, kullanıcıların bir sonraki veya bir önceki sayfayı görmek için sola veya sağa kaydırdığı basit bir pürüzlü akışdır. UIPageViewController'ım var ve her sayfada bir UITableView var. Ben nedenlerle viewControllerAfterViewController ve viewControllerBeforeViewController fonksiyonları iç sayfa endeksinin takip çalışıyorum problemler burada açıklandığı oldu: Ben willTransitionToViewControllers ve iç indeksi takip bu soruna (tüm önerilen çözümlerden aşağıdaki denedim PageViewController delegate functions called twice
didFinishAnimating) ama bu benim viewController * ViewController işlevleri hala bir viewController döndürmek zorundadır ve başlangıçta iki kez denir beri ilk viewController kullanılan alır ve ikinci geçiş görünmüyor gibi görünüyor gibi benim sorunumu çözmez herhangi bir etkisi olması.
Bu sorunla ilgili birçok soru ve blog görmeme rağmen, viewController * ViewController işlevlerinden doğru viewController öğesini sürekli olarak nasıl döndüreceğinizi gösteren bir örnek görmedim ve bir örnek için büyük bir minnettar olacaktır. Bir çözüm göremediğim asıl sorun, içeriği yalnızca sayfa yükünde dinamik olarak güncellenen tek bir viewController varsa, willTransitionToViewControllers içindeki bir sonraki dizinin nasıl belirleneceğidir. Bana tavuk ve yumurta problemi gibi geliyor; Sayfayı hangi içerikle güncelleyeceğimi anlamaya ihtiyacım var, ancak bunu yapmak için sayfanın dizininin ne olduğunu (içeriğin bir parçası) bilmem gerekiyor.
- (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;
}
Ben bu işlevler doğru verilerle doldurulması denilen olsun ve küresel _pageViewContentController beklenebilir sırayı debug ettik:
Düzenleme İşte etkilenen kod damıtılmış versiyonu sayfa değiştikten sonra.
Edit 2 Sorunumla ilgili daha fazla ayrıntı vermek için; sayfalarımın her biri bir başlık ve bir web bağlantısı tablosu içerir. Bir linke tıkladığınızda seçilen web sayfasını görüntülemek için bir WebViewController açılır. Yunus'un çözümüyle, her şey doğru bir şekilde görüntüleniyor (başlık ve bağlantılar beklendiği gibi görünür) ancak sorun, bir sonraki sayfadan bir link yükledikçe bir bağlantıya tıklandığında ortaya çıkar. Sayfanın görüntü oluşturma aşaması verilerin doğru olduğu noktada gerçekleşmiş gibi görünmektedir, ancak sonra sayfa içeriği denetleyicisini, işlem tamamlandıktan sonra yanlış verilerle yeniden başlatır, bu nedenle gerçek bağlantı verileri yanlıştır (işlenen veriler iyi olsa da)).
Kodunuzun bazı ilgili bölümlerini paylaşabilir misiniz? –
@YunusErenGuzel - kod parçacıkları eklendi. – bobby
Bu WebViewController'ı nasıl açıyorsunuz? UIPageViewController içinde veya modal veya etc? –