来自UITableViewController的segue不能作为推送工作,仅作为模态工作

时间:2012-01-11 05:47:16

标签: ios5 uitableview segue

我有这个视图堆栈:

UIViewController --> (Modal segue) --> 
UITabBarController --> (relationship) --> 
UINavigationController --> (relationship) --> 
UITableViewController --> (segue) --> UIViewController

这是我在UITableViewController中的segue代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"selected row...");
    [self performSegueWithIdentifier:@"showVmail" sender:self];
    NSLog(@"done segue");
}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showVmail"]) {
        NSLog(@"Got segue request...");
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

        [segue.destinationViewController setMyVmail: [self.vmails objectAtIndex:indexPath.row]];

    }
}

当我点击表格视图控制器中的某个项目时,我会看到这些日志消息:

selected row...
Got segue request...
Setting myVmail... // from the new view controller
done segue

它不会移动到我的新视图控制器上。 如果我改为模态,可以使用它,但当然没有后退按钮。 据我所知,我已经做好了一切。我已经阅读了许多关于堆栈溢出的响应,同样的问题,它们的解决方案是放入UINavigationController。我已经做到了。

任何想法都会非常感激!

1 个答案:

答案 0 :(得分:0)

我尝试了其他的建议,你应该回到简单的案例。我将故事板中的UINavigationController更改为指向基本的UIViewController,然后为此设置一个按钮,该按钮可以连接到另一个UIViewController。当我运行它时,我仍然得到了我的UITableViewController!

那时我记得我以编程方式填写了UITabBarController中的对象,并且我没有调用UINavigationController,而是跳过它并调用UITableViewController!所以事实上,我真的遇到了和其他人一样的问题,错过了UINavigationController!

将我的程序更改为链接UINavigationController而不是UITableViewController,现在所有程序都按预期工作。