2015-12-23 3 views
0

Вот то, что я так далеко:Если заявление основано на какой-либо предыдущий контроллер представления был

- (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 часть только что сделал, чтобы показать вы, что я хочу попробовать).

Что я пытаюсь сказать: если вы получили это представление через этот сеанс или с этого контроллера вида с именем suchandsuch, тогда заготовьте этот сеанс или этот сегмент. Есть ли способ, которым я могу это сделать?

+0

вы не должны использовать имя предыдущего контроллера представления. контроллер, запускающий segue этому контроллеру, должен установить флаг (возможно, перечисление), чтобы указать, какой тип «редактирования» вы делаете, а затем вы должны использовать это, чтобы решить, что делать. ваш другой код также идентичен в каждой ветке, если это необходимо сделать до if ... – Wain

+1

Вы можете удалить дублирование кода, так как первые 5 строк в обеих ветвях точно совпадают. Просто переместите эту часть перед фактическим if-блоком. – luk2302

+0

Могу ли я использовать предыдущий сеанс, чтобы добраться до этого вида, чтобы определить, какой из следующих вариантов использовать? –

ответ

1

Вы можете проверить предыдущий 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]; 
} 
+0

Мне нравится это решение. – trojanfoe

+0

Отличное решение, однако зачем опустить фигурные скобки из первого if-statment. Просто делает чтение не таким ясным ... – Tander

+0

brillant! thats отсортировал его :) спасибо! –

Смежные вопросы