如果基于前一个视图控制器的声明

这是我到目前为止:

- (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 ,然后preform这个segue或继续。 有什么办法可以做到吗?

您可以从导航控制器中检查堆栈的前一个ViewController。

 - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if ([self.filteredArray count] == 0) self.person = self.users[indexPath.row]; else self.person = self.filteredArray[indexPath.row]; self.mugshot = cell.imageView.image; //Not the viewcontroller name string. Use the ViewController class name if ([self backViewController] == YOURVIEWCONTROLLER) { [self performSegueWithIdentifier:@"SelectPerson" sender:self]; } else { [self performSegueWithIdentifier:@"selectVisitee" sender:self]; } } 

使用下面这个方法,

 - (UIViewController *)backViewController { NSInteger numberOfViewControllers = self.navigationController.viewControllers.count; if (numberOfViewControllers < 2) return nil; else return [self.navigationController.viewControllers objectAtIndex:numberOfViewControllers - 2]; }