didSelectRowAtIndexPath + performSegueWithIdentifier + modal segue = 不能将 self 添加为子视图



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

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/dell到我的新视图控制器中。我不知道我在做这件事的时候是否弄坏了什么,但即使我把这一切都恢复到我第一次添加segue调用时的状态,我仍然会得到"无法将自己添加为子视图"。是的,我在中间做了清洁。

我意识到我可能太不可知了,不能尝试这样做,但这是我的工作。我花了一天的大部分时间寻找线索,但都没有成功,所以在恶作剧之前我会让自己感到羞愧。如有任何协助,我们将不胜感激。

对于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
}
}

来自didSelectRowAtIndexPath:

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

为Segue做准备:

- (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,并且有一个名为NSString类型字符串的属性

最新更新