我有一个基于UITabBarController模板的应用程序,其中第一个选项卡是一个UITableViewController,在单元格中有自定义按钮。我需要一个单元格中的一个按钮来调用父UITabBarController中的特定选项卡。我在didSelectRowAtIndexPath:
中使用此代码case 5:
NSLog(@"Search");
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// Get UITabBar instance and send it message
UITabBarController *tabBar = (UITabBarController*)[self parentViewController];
[tabBar setSelectedIndex:1];
break;
当我点击此行时,应用程序崩溃而控制台中没有任何日志。我在UITableViewController中调用它,这是UITabBarController中的第一个选项卡。
PS我还想避免在用户点击时发生此单元格上的蓝色选择。所以我添加了这段代码:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
switch (indexPath.row) {
case 1:
return nil;
break;
}
}
但是当我点击它时它仍然会选择蓝色。它们可能是相关的问题吗?
答案 0 :(得分:1)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
UITabBarController *tabController = (UITabBarController *) UIApplication.sharedApplication.keyWindow.rootViewController;
[tabController setSelectedIndex:1];
}
第一条消息将取消选择该行,避免蓝色选择。
由于您的应用是基于标签的,因此关键窗口的根控制器始终是UITabBarController
的实例。