【发布时间】:2015-12-23 09:49:51
【问题描述】:
这是我到目前为止所做的:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (preivousViewController isEqualToString:@"...")
{
if ([self.filteredArray count] == 0)
self.person = self.users[indexPath.row];
else
self.person = self.filteredArray[indexPath.row];
self.mugshot = cell.imageView.image;
[self performSegueWithIdentifier:@"SelectPerson" sender:self];
} else {
if ([self.filteredArray count] == 0)
self.person = self.users[indexPath.row];
else
self.person = self.filteredArray[indexPath.row];
self.mugshot = cell.imageView.image;
[self performSegueWithIdentifier:@"selectVisitee" sender:self];
}
}
它看起来很乱,这就是我试图修复它的原因(previousViewController 部分只是为了向你展示我想要尝试做的事情)。
我想说的是:如果你是通过这个 segue 或者从名为 suchandsuch 的那个视图控制器获得这个视图的,那么执行这个 segue 或那个 segue。有什么办法可以做到吗?
【问题讨论】:
-
你不应该使用前一个视图控制器的名字。触发此控制器的 segue 的控制器应设置一个标志(可能是一个枚举)以指定您正在执行哪种类型的“编辑”,然后您应该使用它来决定要做什么。您的其他代码在 if 的每个分支中也是相同的,因此应该在 if... 之前完成
-
您可以删除代码重复,因为两个分支中的前 5 行完全相同。只需将该部分移到实际的 if 块前面。
-
我可以不使用上一个用于进入此视图的 segue 来确定接下来要使用哪个 segue 吗?
-
是的,但是使用
enum或BOOL来识别它是哪个视图控制器。查看重复项,看看两个块之间有什么不同。基本上唯一的条件逻辑是围绕下一个标识符的名称;即NSString *nextVC = _previousViewControllerWasSomething ? @"SelectPerson" : @"SelectVisitee";.
标签: ios objective-c segue uistoryboard viewcontroller