2016-04-08 20 views
0

Uygulamamda tabBarController var. UITableViewController olan başka bir tabBar'a dokunduğunuzda görünüm boştur ve cellForRowAtIndexPath ateş etmemelidir (numberOfRowsInSection sıfır değil veya sıfır).tabBarController cellForRowAtIndexPath'ı tetiklemiyor UITableViewController

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
[[viewController navigationController] popToRootViewControllerAnimated:NO]; 
switch (tabBarController.tabBar.selectedItem.tag) { 
    case 1: 
     NSLog(@"Home"); 
     break; 
    case 2: 
     NSLog(@"Profile"); 
     break; 
    case 3: 
    { 
     NSLog(@"Bookmark"); 
     BookmarkCategoryViewController *bookmarkVC =[self.storyboard instantiateViewControllerWithIdentifier:@"BookmarkCategory"]; 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
      /// Background work 
      BookmarkManager *p = [[BookmarkManager alloc]init]; 
      [p fetchBookmarks:self.categoryId]; 
      bookmarkVC.entries = p.appRecordList; 
      bookmarkVC.categoryId = self.categoryId; 
      bookmarkVC.ID_list_entries = _ID_list_entries; 

      [bookmarkVC.tableView reloadData]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       /// Update UI 

       [tabBarController setSelectedIndex:1]; 
      }); 
     }); 

    } 
     break; 
    case 4: 
     NSLog(@"Setting"); 
     break; 
    default: 
     NSLog(@"Home"); 
     break; 
} 
} 

ama aynı kod, değişiklik için:

Kod olduğu doğru

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
[[viewController navigationController] popToRootViewControllerAnimated:NO]; 
switch (tabBarController.tabBar.selectedItem.tag) { 
    case 1: 
     NSLog(@"Home"); 
     break; 
    case 2: 
     NSLog(@"Profile"); 
     break; 
    case 3: 
    { 
     NSLog(@"Bookmark"); 
     BookmarkCategoryViewController *bookmarkVC =[self.storyboard instantiateViewControllerWithIdentifier:@"BookmarkCategory"]; 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
      // Background work 
      BookmarkManager *p = [[BookmarkManager alloc]init]; 
      [p fetchBookmarks:self.categoryId]; 
      bookmarkVC.entries = p.appRecordList; 
      bookmarkVC.categoryId = self.categoryId; 
      bookmarkVC.ID_list_entries = _ID_list_entries; 

      [bookmarkVC.tableView reloadData]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       /// Update UI 

       [bookmarkVC setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; 
       [self.navigationController pushViewController:bookmarkVC animated:YES]; 
      }); 
     }); 

    } 
     break; 
    case 4: 
     NSLog(@"Setting"); 
     break; 
    default: 
     NSLog(@"Home"); 
     break; 
} 
} 

çalışması! ama tabBarController gizlemek ve başka bir görünüm tabBarController görünümüne itin. Yardım için teşekkürler.

+0

Arka plan sırasına 'reloadData 'diyemezsiniz. – Sulthan

cevap

3

A UITabBarController, konteyner görüntüsü denetleyicisidir. Bazı ViewControllers görünümünü yönetir.

Gösterilen kod, BookmarkCategoryViewController'un yeni bir örneğini oluşturmaktır. Bu yeni örnek, sekme çubuğu denetleyicinizde olanı değil, bu nedenle ilk kod bloğunuzun herhangi bir etkisi yok gibi görünüyor; Ekrandaki görüntü denetleyicisini değiştirmiyor.

İkinci kod bloğunuz yeni görünüm denetleyicisini zorlar, böylece efekti görürsünüz, ancak sekme çubuğu denetleyicinizin üstünden itilir.

Yapmanız gereken, sekme çubuğu denetleyicisinde bulunan BookmarkCategoryViewController erişimidir; Sekme çubuğu denetleyicisinin viewControllers özelliğini kullanarak bunu yapabilirsiniz:

case 3: 
{ 
    NSLog(@"Bookmark"); 
    BookmarkCategoryViewController *bookmarkVC = (BookmarkCategoryViewController *)tabBarController.viewControllers[tabBarController.tabBar.selectedItem]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
     // Background work 
     BookmarkManager *p = [[BookmarkManager alloc]init]; 
     [p fetchBookmarks:self.categoryId]; 
     bookmarkVC.entries = p.appRecordList; 
     bookmarkVC.categoryId = self.categoryId; 
     bookmarkVC.ID_list_entries = _ID_list_entries; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [bookmarkVC.tableView reloadData]; 
     }); 

    }); 

} 
İlgili konular