4

我的WishlistVC(列出所有愿望清单的 VC)中有一个放松的 segue。现在,此 VC 允许用户点击愿望清单,如果它是空的,则调出EditWishlistItemsVC,以便选择要放入该愿望清单中的项目。WishlistVC 还有另一个按钮,允许用户创建新的心愿单,然后调用 按钮,EditWishlistItems以便用户可以将项目添加到新的心愿单。这两者都是同一个 VC 的不同选择。

当我放松时,我想知道是谁调用了EditWishlistItemsVC,即在我的放松转场中我执行了哪个转场。如果它来自addItemsToWishlist模态序列,那么我想将心愿单添加到 Core Data,如果它来自editWishlistItems模态序列,我想在 CD 中编辑心愿单的项目。

当我放松时,有什么方法可以知道这些信息?

4

2 回答 2

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

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

最后

-(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 交互。

于 2013-05-29T22:27:25.590 回答
1

THE_DOM 的回答很好,但这就是我解决问题的方法。

要查看是否需要模态分割,我们在下面的委托方法中检查并查看我们的愿望清单中是否没有项目。如果没有,我们告诉它继续。如果它确实有项目,则推送 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中,我们设置了 aBOOL来指示用户点击了一个空心愿单(这是在我们的目标 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
    }
}
于 2013-05-30T12:25:52.137 回答