2013-10-07 44 views
0

我有一個問題,我可以重現。我可以看到問題是什麼,但對於我的生活我無法弄清楚如何糾正它。首先,讓我解釋視圖結構。UICollectionView數據源方法裏面的UITabBarView沒有被調用,直到標籤導航到

窗口的根視圖控制器是TabBarController。 TabBarController包含兩個視圖,NavigationController 1(nav)的根視圖控制器設置爲UITableView和NavigationController 2(nav2),其根視圖控制器設置爲UICollectionView。以下是如何那就是在AppDelegate中的所有設置:

WTATableView *tv = [[WTATableView alloc] initWithNibName:@"WTATableView" bundle:nil]; 
UINavigationController *nav = [[UINavigationController alloc] 
initWithRootViewController:tv]; 
nav.tabBarItem.title = NSLocalizedString(@"Birthday List", nil); 
nav.tabBarItem.image = [UIImage imageNamed:@"birthdaycake"]; 


WTACollectionViewController *cv = [[WTACollectionViewController alloc] 
initWithCollectionViewLayout:[[UICollectionViewFlowLayout alloc] init]]; 


UINavigationController *nav2 = [[UINavigationController alloc]  
initWithRootViewController:cv]; 
nav2.tabBarItem.title = NSLocalizedString(@"Birthday Grid", nil); 
nav2.tabBarItem.image = [UIImage imageNamed:@"package"]; 

UITabBarController *tabController = [[UITabBarController alloc] init]; 
tabController.viewControllers = @[nav, nav2]; 
self.window.rootViewController = tabController; 
[self.window makeKeyAndVisible]; 
return YES; 

的的CollectionView贊同由一個條目視圖控制器發佈,並採取通知的UserInfo字典返回的數據,並通過調用數據更新UICollectionview的通知源方法。下面是該代碼:

-(void)handleNotification:(NSNotification *)notification 

{ 
    [self.birthdays addObject:[notification userInfo]]; 

NSLog(@"Calling handle method"); 

if([self.birthdays count] == 1){ 
    [self.collectionView reloadData]; 
} 
if (self.birthdays.count > 1) { 
    NSLog(@" Number of itmes in section B: %d", [self.collectionView 
numberOfItemsInSection:0]);  [self.collectionView  
insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem: (self.birthdays.count -1) 
inSection:0]]]; 
} 


} 

所以在包含導航設置爲一個UITableView,如果我點擊了NavBarButton顯示模式視圖控制器,並得到了用戶的條目,然後解僱其根控制器的第一標籤欄項目模態控制器返回到UITableVIew,我得到新的表格條目。如果我然後點擊包含nav2及其根控制器的標籤欄項目作爲UICollectionView,然後返回到UITable標籤欄項目,我可以繼續添加儘可能多的項目,如我所願,沒有問題。但是,如果我不導航到包含uicollectionview的標籤欄項目,並嘗試從uitableview添加第二個項目,我每次都會發生崩潰,部分項目的項目數量無效「。

我可以看到如果我不會導航到uicontroller選項卡,uicontroller的數據源方法永遠不會被調用。它就像UICollectionView沒有被初始化,直到我導航到標籤欄,但我知道這是因爲我NSLog出的init方法和視圖做我認爲這可能與uicollectionview被包裹在nav2控制器中有關,所以我把它拿走了,並且我得到了完全相同的行爲......我覺得我在這裏錯過了一些東西給我帶來很大的悲痛......任何建議都將不勝感激

+0

我可以清楚地看到,當生日數組有一個項目,並且該條件在handleNotification方法中得到滿足時數據源方法numberofItemsinSection和cellforItemAtIndexPath不被調用。即使我可以通過執行[self.collectionview.datasource]的NSLog來看到實例是collectionview數據源和委託。這給了我同樣的實例,我使用自我的NSLog在uicollectionview viewdidload方法中註銷。 –

回答

0

我想出瞭如何讓這個工作。它感覺「哈克」,但它的工作原理:-)我不得不在模擬代碼中的標籤欄導航事件。所以在上面概述的處理程序方法中,在生日== 1的情況下,我添加了self.TabBarController.selectedIndex = 1;然後,在cellForItemAtIndexPath方法中,在返回一個單元格之前,我插入了self.tabBarController.selectedIndex = 0;我仍然希望我知道根本原因,究竟是從uicollectionview tabb ar真正翻轉什麼......

相關問題