我在标签栏页面上有UITableView
。现在,如果点击UITableViewCell
,我想推送到新的标签栏控制器。
我的故事板现在看起来像这样:
我的问题是,当我点击单元格时,它会打开新页面(图片中右上方的控制器),但TabBar仍然与之前相同,即使我设置了一个,导航栏标题也是空的( self.title = @"Test";
)
以下是一些代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"segue" sender:self.view];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"segue"])
{
NSIndexPath *indexPath = [myTableView indexPathForSelectedRow];
self.myTabbarController = (UITabBarController*)[segue destinationViewController];
self.topRightController = [self.myTabbarController.viewControllers objectAtIndex:0];
self.topRightController.value = [Values objectAtIndex:indexPath.row];
}
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
我解决了我的问题。我将故事板改为这样的(不是我的实际故事板):
我不再使用push segue了。我现在使用模态segue。我使用自己的后退按钮返回第一个标签栏控制器。
以下是didSelectRowAtIndexPath
方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITabBarController *tab = [self.storyboard instantiateViewControllerWithIdentifier:@"newTabBarController"];
self.myNavController = [tab.viewControllers objectAtIndex:0];
self.topRightController = [self.myNavController.viewControllers objectAtIndex:0];
self.topRightController.value = [Values objectAtIndex:indexPath.row];
[self presentViewController:tab animated:YES completion:nil];
}
答案 1 :(得分:0)
问题在于推送segue是导航控制器环境中的一个推动,它发生在内部现有的标签栏控制器中。要获得您想要的效果,请将其设置为模式演示,在(新)导航控制器上滚动您自己的后退按钮。该按钮的动作将是dismissViewController。
另一种方法是单独保留导航控制器,并根据推送的内容修改标签栏。 (使用的替代方案取决于应用程序语义)。这也很棘手,因为你需要通过导航控制器进入包含标签栏vc。
答案 2 :(得分:0)
如果您创建委托方法并在创建第一个UITabBarController
的类中实现该方法,则可以在那里创建新的UITabBarController
。
您需要实施-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
来调用委托方法,然后以与显示第一个方法相同的方式创建和显示新UITabBarController
。
如果您想要从新的UITabBarController
到原始的后退按钮,您需要手动将其添加到新控制器,因为默认的后退按钮是自动处理的,只存在于每个UINavigationController
。