从标签栏控制器推送到新的标签栏控制器

时间:2014-08-07 14:47:51

标签: ios uitableview uinavigationcontroller uitabbarcontroller segue

我在标签栏页面上有UITableView。现在,如果点击UITableViewCell,我想推送到新的标签栏控制器。

我的故事板现在看起来像这样: TabBarPush

我的问题是,当我点击单元格时,它会打开新页面(图片中右上方的控制器),但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];
    }
}

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

我解决了我的问题。我将故事板改为这样的(不是我的实际故事板):

SolvedPicture

我不再使用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

相关问题