この質問については、didSelectRowAtIndexPath内のカスタムデリゲートメソッドと同じような懸念があります。
ただし、私の場合、BarCodeViewControllerという名前のUIViewControllerであるデリゲートオブジェクトに到達する前に、まず、テーブルビューコントローラーであるCardViewControllerである初期ビューコントローラーから2つのビューコントローラーを通過する必要があります。これにより、カスタムデリゲートのデリゲートオブジェクトを設定しています。
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CardDetailsViewController *details = [self.storyboard instantiateViewControllerWithIdentifier:@"cardDetails"];
Card *selectedCard = [self.myWallet objectAtIndex:indexPath.row]; // I want this selected card to be accessible until the user clicks another card or during end of program.
[self.navigationController pushViewController:details animated:YES];
[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];
[self setDelegate:self.barCodeVC]; // barCodeVC is declared in CardWalletViewController.h as @property (nonatomic, strong) BarCodeViewController *barCodeVC;
if (self.delegate) {
NSLog(@"delegate is not nil");
}
}
これが、デリゲートオブジェクトとして設定したViewControllerをインスタンス化する方法です。
- (void)viewDidLoad
{
[self setBarCodeVC:[self.storyboard instantiateViewControllerWithIdentifier:@"myBarcodeVC"]];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
そして、BarCodeViewControllerである私のデリゲートオブジェクトに、デリゲートメソッドを実装します
#import "CardWalletViewController.h"
@interface BarCodeViewController () <CardWalletDelegate>
@end
@implementation
- (void)cardWalletViewController:(CardWalletViewController *)sender withCurrentCard:(Card *)currentCard
{
Card *myCurrentCard = currentCard;
NSLog(@"This is my current card: %@", myCurrentCard);
}
@end
デリゲートオブジェクトを設定できると思いますが、コンソールにNSLog(@ "this is my current ......");が表示されないため、デリゲートメソッドが実装されていません。BarCodeViewControllerに到達したとき。
アドバイスをお願いします。