2013-05-29 4 views
4

У меня есть развязка в моем WishlistVC (VC, в котором перечислены все списки желаний). Теперь этот VC позволяет пользователю нажимать на список пожеланий и, если он пуст, вывести EditWishlistItems VC, чтобы можно было выбрать, какие элементы помещать внутри этого списка пожеланий. В WishlistVC также есть еще одна кнопка, которая позволяет пользователю создать новый список желаний, а затем вызывает EditWishlistItems, чтобы пользователь мог добавлять элементы в новый список желаний. Оба эти варианта относятся к одному и тому же VC.Как узнать, какой segue называется пунктом назначения в режиме размотки?

Когда я разматываю, я хочу знать, кто вызвал EditWishlistItems VC, т. Е. Какой сеанс я выполнил, продвигаясь вперед в своем разматывании. Если это из модального сегмента addItemsToWishlist, то я хочу добавить список желаний к Core Data, и если это от editWishlistItems modal segue, я хочу отредактировать элементы списка пожеланий на компакт-диске.

Любой способ узнать эту информацию, когда я расслаблюсь?

ответ

1

Ответ от The_DOM хорош, но я как-то исправил свою проблему.

Чтобы узнать, нужно ли нам выполнить modally segue, мы проверяем и видим, нет ли в нем этого списка в следующем методе делегата. Если нет, мы скажем, чтобы это произошло. Если у него есть элементы, то push segue будет автоматически вызван вместо этого (настроен в IB).

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Wishlist *wishlist = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    if([wishlist.items count] == 0) { 
     // execute our segue 
     [self performSegueWithIdentifier:@"editWishlistItems" sender:self]; 
    } 
} 

В нашем prepareForSegue мы устанавливаем BOOL, чтобы указать пользователь повернутый на пустом листе желаний (это в нашем назначении VC).

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    ... // other segues 
    if([segue.identifier isEqualToString:@"editWishlistItems"]) 
    { 
     UINavigationController *navigationVC = (UINavigationController *)segue.destinationViewController; 
     ManageWishlistItemCDTVC *manageWishlistItemVC = (ManageWishlistItemCDTVC *)navigationVC.topViewController; 
     manageWishlistItemVC.tappedOnEmptyWishlist = YES; 
     manageWishlistItemVC.wishlist = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    } 
} 

А потом, когда мы развернем, мы проверяем, если BOOL является YES или NO.

- (IBAction)saveWishlistItem:(UIStoryboardSegue *)segue { 
    ManageWishlistItemCDTVC *manageWishlistItemVC = (ManageWishlistItemCDTVC *)segue.sourceViewController; 

    // check to see if we came from edit segue or add segue 
    if(manageWishlistItemVC.tappedOnEmptyWishlist) { // edit segue 
     // saved edited wishlist 
    } else { // add segue 
     if([manageWishlistItemVC.selectedItems count] > 0) { 
      // save new wishlist 
    } 
} 
6

Я хотел бы сделать это, добавив свойство

@property (nonatomic, strong) NSString *recentSegue; 

, а затем создать

-(void)addItemsToWishList:{ 
    //business logic 
    self.recentSegue = @"addItems"; 
    [self performSegueWithIdentifier:@"EditWishlistItems" sender:self]; 
} 

-(void)editWishListItems:{ 
    //business logic 
    self.recentSegue = @"editItems"; 
    [self performSegueWithIdentifier:@"EditWishlistItems" sender:self]; 
} 

Затем связать кнопки с этими методами, а не непосредственно выполняющих перетекает

и, наконец,

-(void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    if(self.recentSegue){ 
      if(self.recentSegue isEqualToString:@"addItems") { 
       //do Whatever 
      } else if(self.recentSegue isEqualToString:@"editItems") { 
       //do whatever else 
      } 
      self.recentSegue = nil; 
    } 
} 

Хотя это должно работать, другой способ, который может быть лучше в зависимости от вашего дизайна, - позволить DirectWishListItems напрямую обрабатывать взаимодействие с coredata.

+0

'viewDidAppear' - плохая идея. Это будет вызвано снова в ряде обстоятельств, таких как пользователь, переключая приложения и обратно, или отклоняя представленный модально представленный контроллер представления. –

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