我对这个问题a custom delegate method inside didSelectRowAtIndexPath有点类似的关注。
但是,在我的情况下,在获取一个名为BarCodeViewController的UIViewController的委托对象之前,我应该首先从初始视图控制器传递2个视图控制器,它是一个表视图控制器CardViewController。我通过以下方式为自定义委托设置委托对象:
- (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");
}
}
这就是我实例化我设置为委托对象
的视图控制器的方法- (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(@“这是我当前的......”);当我到达BarCodeViewController时。
请咨询。
答案 0 :(得分:0)
这不是代表的标准用法,很难说出你真正想要发生的事情。但是,它看起来像你的代码......
[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];
[self setDelegate:self.barCodeVC];
正在对“旧”代表进行调用(在将其设置为barCodeVC之前)。你真的想在“新”代表上打电话吗?应该是......
[self setDelegate:self.barCodeVC];
[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];
修改强>
我所说的是你在这一行中向代表发送消息......
[self.delegate cardWalletViewController:self withCurrentCard:selectedCard];
然后您将委托设置为barCodeVC
[self setDelegate:self.barCodeVC];
因此,在将消息设置为barCodeVC(另一个视图控制器,或nil,或......)之前,实际上将消息发送到委托设置的任何内容。也许这就是你想要发生的事情,但它看起来很可疑。