导航栏"取消"

时间:2017-01-28 10:56:06

标签: ios objective-c iphone

我目前面临的问题是,如果我在桌面视图中选择一行并返回并按下" +"导航栏中的按钮,我的应用程序将崩溃。我怀疑这可能是因为我选择了" show modally" xcode中的选项。无论如何,我可能完全不在,但这是我的代码。请耐心等待,因为我只选择了编码

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  NSIndexPath *path = [self.tableView indexPathForSelectedRow];
  displayViewController *vc;

  vc = [segue destinationViewController];
    if (path != NULL) {
        vc.pID = path.row;
    }
}

这是我的prepareForSegue函数,当我尝试将vc.pID设置为path.row时发生错误,因为如果我点击" +"按钮,它没有一行。如果按下" +"有没有办法不进入prepareForSegue功能?按钮?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您要做的是将segue标识符的测试添加到prepareForSegue中。

segue属性具有标识符值。

if segue.identifier == "nameOfSegueIdentifier" { // do stuff here }

这样您就可以根据UI的哪个方面触发segue来运行特定代码。

修改

抱歉,现在只看到你正在使用目标C.我的代码在Swift中。不确定如何在目标C中实现它,但概念将是相同的。

答案 1 :(得分:1)

在objective-c中准备segue的形式是......

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"someIdentifierA"]) {
        // get the table view selection, for example
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];
        // get some part of my datasource (model), for example
        MyModelObject *modelObject = self.datasourceArray[indexPath.row];
        // initialize part of the model on the destination vc
        MyOtherViewController *destination = (MyOtherViewController *)segue.destinationViewController;
        destination.modelObject = modelObject;
    } else if ([segue.identifier isEqualToString:@"someIdentifierB"]) {
        // same idea here, but different segue to different destination
        NSIndexPath *path = [self.tableView indexPathForSelectedRow];
        displayViewController *vc = (displayViewController *)[segue destinationViewController];
        vc.pID = path.row;
    } else if // and so on
    }
}