didSelectRowAtIndexPath + performSegueWithIdentifier + modal segue =无法将self添加为子视图

时间:2014-02-19 09:33:08

标签: ios objective-c segue

我反复搜索相关答案,但未找到(或可能不理解)任何相关的答案。一些事实:

1)我非常非常新 2)我正在使用Xcode 5&定位iOS 7 iPad 3)我试图将一个特征(是的,死亡之吻)添加到由我无法联系的人编写的大型现有应用程序中

该应用程序有一个拆分视图控制器,它链接到一个链接到表视图的导航控制器(以及与原始拆分视图相关的一大堆其他视图)。 如果用户选择的表项具有特定值,我想打开一个新视图(否则让现有逻辑处理它)。

我在表格视图中创建了一个带有模态segue的新视图控制器。我在didSelectRowAtIndexPath方法中添加了一个测试:

if( [[object name] isEqualToString:@"SpecialCase"]) {
    [self performSegueWithIdentifier:@"ScSegue" sender:nil];
}

这至少工作过一次,直到我开始尝试将信息传递给新视图。我已经补充说:

if ([[segue identifier] isEqualToString:@"ScSegue"]) {
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    CBPeripheral *object = _objects[indexPath.row];
    [[segue destinationViewController] setDetailItem:object];
}

我已将setDetailItem()的必要def / decl添加到我的新视图控制器中。我不知道在我这样做的时候是否打破了某些东西,但即使我将所有这些都归还,当我第一次添加segue调用时,我仍然得到“不能将自己添加为子视图”。是的,我在两者之间完成了清洁。

我意识到我可能不太可能尝试这个,但这是我的工作。我大部分时间都在寻找没有成功的线索,所以我在snarkfest之前谦卑自己。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

对于swift:

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    self.performSegueWithIdentifier("showItemDetail", sender: tableView)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showItemDetail" {
        let indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()!
        let detailVC:ItemDetailViewController = segue.destinationViewController as ItemDetailViewController
        detailVC.item = items[indexPath.row] as Item

    }
}

答案 1 :(得分:2)

来自didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [self performSegueWithIdentifier:@"ShowDetail" sender:tableView];
    }

在prepareForSegue中:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowDetail"])
    {
        NSIndexPath *indexPath = nil;
        indexPath = [self.table indexPathForSelectedRow];
        SiteMap *site;
        site = [self.listSite objectAtIndex:indexPath.row];
        Detail *detailController = (Detail*)segue.destinationViewController;
        detailController.string = @"hello";
    }
}

这意味着您的“下一个视图”名称是Detail,并且具有名为string NSString

的属性
相关问题