【发布时间】:2014-03-31 10:01:18
【问题描述】:
我有一个UINavigationController,其中加载了UITableview。在这个UITableView 里面,我有一个prototype 单元格,我用静态数据重复使用了几次,这些数据永远不会改变,也永远不会改变。因此,我将来自viewControlller 的两个推送序列连接到两个destination 视图控制器。这似乎工作得很好。为了调用这些segues,我使用了UItableViews 委托方法:didSelectRowAtIndexPath,所以我知道点击了哪一行,然后转到正确的viewController。
不,问题,它有效。
然后我添加了第三个viewController 及其随附的segue 以匹配,与didSelectRowAtIndexPath 中的前两个和相同设置相同 - 现在,当我点击第二个单元格时,它正在工作,didSelectRowAtIndexPath按预期调用,然后调用正确的segue,然后调用prepareForSegue。然后,prepareForSegue 再次被调用(此时,didSelectRowAtIndexPath 还没有被再次调用)prepareForSegue 方法然后调用不正确的 segue(我添加的第三个 segue)。
我不知道是谁第二次调用prepareForSegue 方法,以及为什么它得到了错误的标识符。
我做错了什么吗?
一些代码示例
这里是didSelectRowAtIndexPath
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row)
{
case CategoryFilter:
{
[self performSegueWithIdentifier:@"FilteredCategoryView" sender:self];
break;
}
case PriceFilter:
{
[self performSegueWithIdentifier:@"FilterByPriceSegue" sender:self];
}
case ConditionFilter:
{
[self performSegueWithIdentifier:@"SearchFilterConditionSegue" sender:self];
}
}
}
然后在prepareForSegue方法中:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"FilteredCategoryView"]){
//No data to pass just yet
}
if ([segue.identifier isEqualToString:@"FilterByPriceSegue"]){
//No data to pass just yet
}
if ([segue.identifier isEqualToString:@"SearchFilterConditionSegue"]){
//No data to pass just yet
}
}
在上述方法中 - 我还没有传递数据,但我会的。它的这个方法被调用了两次。
【问题讨论】:
-
添加了唯一一点调用 segues 的代码。不确定您要查找的其他代码是什么?感谢您的帮助。
-
检查segues的属性是否有差异。所有三个 segue 是否都连接到它们自己的单元格,或者是否有任何 segue 连接到视图/tableview?听起来像是自动触发了一个segue。也许视图触发了非手动的 segue?
-
每个 segue 都连接到 viewController。单击每个 segue 会突出显示整个 viewController,而不是 viewController 中 UitableView 的单元格。从 didSelectRowAtIndexPath 中删除代码 - 没有调用 segue,也没有推送任何视图,正如预期的那样。
标签: ios objective-c uistoryboardsegue