我反复搜索相关答案,但未找到(或可能不理解)任何相关的答案。一些事实:
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之前谦卑自己。非常感谢任何帮助。
答案 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
的属性