2014-02-19 44 views
0

我已经重复搜索相关答案,但没有找到(或可能,不明白)任何相关的内容。一些事实:didSelectRowAtIndexPath + performSegueWithIdentifier + modal 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]; 
} 

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

我意识到我可能太不知道要尝试这样做,但这是我的工作。我大部分时间都在寻找线索而没有取得成功,所以我在snarkfest之前对自己谦卑。任何援助将不胜感激。

+1

Hello @GerryO,在你的代码上放置断点并逐步调试,然后告诉我哪一行出现异常。 –

+0

你好,谢谢!我应该包括这一点。执行此行时发生错误:[self performSegueWithIdentifier:@“ScSegue”sender:nil]; – GerryO

回答

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"; 
    } 
} 

,这意味着你的 “下一个视图” 的名字是详细和具有类型的属性命名的字符串的NSString

+0

感谢您的回复,但Xcode对此并不满意。对不起,这是一个noob,但什么是SiteMap?我无法在任何地方找到对此的参考。此外,在你使用“细节”的地方,我认为这应该被我的实际的详细视图控制器的名称取代?或者,这是另一个关键字,我无法找到解释任何地方(我看起来很远)?再一次,您的帮助非常感谢! – GerryO

+0

你不需要这个对不起,逃脱了我,是细节是你的详细视图控制器。 – hypuerta

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 

    } 
} 
相关问题