我在我的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];
}
}
然后,当我们展开时,我们检查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
}
}