如何找出unwind segue中哪个segue称为目的地



我在我的WishlistVC(一个列出所有愿望清单的VC)中有一个unwind segue。现在,这个VC允许用户点击一个愿望列表,如果它是空的,打开EditWishlistItems VC,这样用户就可以选择哪些项目放入愿望列表中。WishlistVC也有另一个按钮,允许用户创建一个新的愿望列表,然后调用EditWishlistItems,这样用户可以添加项目到新的愿望列表。这两个都是指向同一个VC的不同segue。

当我unwind时,我想知道谁调用了EditWishlistItems VC,也就是说,我在unwind segue中执行了哪个segue。如果它来自addItemsToWishlist模态segue,那么我想把愿望列表添加到Core Data,如果它来自editWishlistItems模态segue,我想在CD中编辑愿望列表的项目。

当我unwind时,有什么方法知道这个信息吗?

我会通过添加属性

来实现
@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];
}

然后将您的按钮链接到这些方法,而不是直接执行segue

最后

-(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;
     }
}

虽然这应该可以工作,但根据您的设计,另一种可能更好的方法是让EditWishListItems直接处理coredata交互

THE_DOM的答案是好的,但这就是我如何解决我的问题。

要查看是否需要模态segue,我们可以在下面的委托方法中检查wishlist中是否没有项目。如果不是,我们让它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];
    }
}

然后,当我们展开时,我们检查BOOLYES还是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
    }
}

最新更新