我有UINavigationController
,其中加载了UITableview
。在这个UITableView
里面,我有一个prototype
单元格,我重复使用了几次静态数据,这些数据永远不会改变,永远也不会。因此,我将两个推送segue从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
}
}
在上面的方法中 - 我还没有传递数据,但我会。它的这个方法被调用两次。
答案 0 :(得分:4)
您在break
的第二和第三个案例中忘记了switch
可能会有所帮助;)
使用以下命令更改开关:
switch (indexPath.row)
{
case CategoryFilter:
{
[self performSegueWithIdentifier:@"FilteredCategoryView" sender:self];
break;
}
case PriceFilter:
{
[self performSegueWithIdentifier:@"FilterByPriceSegue" sender:self];
break;
}
case ConditionFilter:
{
[self performSegueWithIdentifier:@"SearchFilterConditionSegue" sender:self];
break;
}
}
如果你没有在每种情况下都放置break
指令,那么交换机将完成所有其他情况,直到交换机结束或另一个break
指令。