tabBarController 不触发 cellForRowAtIndexPath UITableViewController
tabBarController don't fire cellForRowAtIndexPath UITableViewController
我的应用程序中有 tabBarController。当点击另一个 tabBar 即 UITableViewController 时,视图为空并且 cellForRowAtIndexPath 不会触发(numberOfRowsInSection 不是零或零)。
代码是:
- (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;
}
}
但更改为时代码相同:
- (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;
}
}
工作正常!但是 tabBarController 隐藏并且另一个视图推送到 tabBarController 视图。
感谢您的帮助。
A UITabBarController
是容器视图控制器。它管理许多 ViewController 的外观。
您显示的代码正在创建 BookmarkCategoryViewController
的新实例。这个新实例不是您的选项卡栏控制器中的实例,这就是为什么您的第一段代码似乎没有任何效果的原因;它没有修改屏幕上的视图控制器。
你的第二个代码块推送了新的视图控制器,所以你看到了效果,但是它被推送到了你的标签栏控制器的顶部。
您需要做的是访问标签栏控制器中已有的BookmarkCategoryViewController
;您可以使用选项卡栏控制器的 viewControllers
属性 来执行此操作:
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];
});
});
}
我的应用程序中有 tabBarController。当点击另一个 tabBar 即 UITableViewController 时,视图为空并且 cellForRowAtIndexPath 不会触发(numberOfRowsInSection 不是零或零)。
代码是:
- (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;
}
}
但更改为时代码相同:
- (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;
}
}
工作正常!但是 tabBarController 隐藏并且另一个视图推送到 tabBarController 视图。 感谢您的帮助。
A UITabBarController
是容器视图控制器。它管理许多 ViewController 的外观。
您显示的代码正在创建 BookmarkCategoryViewController
的新实例。这个新实例不是您的选项卡栏控制器中的实例,这就是为什么您的第一段代码似乎没有任何效果的原因;它没有修改屏幕上的视图控制器。
你的第二个代码块推送了新的视图控制器,所以你看到了效果,但是它被推送到了你的标签栏控制器的顶部。
您需要做的是访问标签栏控制器中已有的BookmarkCategoryViewController
;您可以使用选项卡栏控制器的 viewControllers
属性 来执行此操作:
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];
});
});
}