THE_DOMの答えは良いですが、これが私の問題を解決した方法です。
モーダル セグエが必要かどうかを確認するには、次のデリゲート メソッドでウィッシュ リストにアイテムがないかどうかを確認します。そうでない場合は、セグエに指示します。アイテムがある場合は、代わりにプッシュ セグエが自動的に呼び出されます (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
a を設定します (これは目的の VC にあります)。BOOL
-(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
}
}