请看下面的代码。
在CusFormViewController.h
中
@interface CusFormViewController : CusBaseViewController
@protocol CusFormViewControllerDelegate <NSObject>
-(void)ticketCreated:(NSString*)ticketID;
-(void)ticketFormRenderingFinished;
@end
@property (nonatomic, weak) id<CusFormViewControllerDelegate> delegate;
在CusFormViewController.m
中
if ([self.delegate respondsToSelector:@selector(ticketFormRenderingFinished)])
[self.delegate ticketFormRenderingFinished];
if ([self.delegate respondsToSelector:@selector(ticketCreated:)])
[self.delegate ticketCreated:ticket_id];
在ViewController.m
中
#import "CusFormViewController.h"
@interface ViewController ()<CusFormViewControllerDelegate>
- (void)viewDidLoad {
[super viewDidLoad];
CusFormViewController *formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}
-(void)ticketCreated:(NSString*)ticketID{
NSLog(@"ticket created.");
}
-(void)ticketFormRenderingFinished{
NSLog(@"ticket form rendered.");
}
未调用ticketCreated
和ticketFormRenderingFinished
。
发布于 2015-10-15 08:10:49
委托方法不被调用的最常见原因是处理不正确的对象。
ViewController
创建的CusFormViewController
对象与您在屏幕上显示的对象相同,并且在同一对象上设置代理。我真的相信你正在创建一个新的CusFormViewController
对象,并在上面设置委托。CusFormViewController
中,在调用delegate之前,还要检查一下委托是否存在。这是一个安全检查,你也可以放一条NSLog语句来仔细检查你的委托是否存在。你在这里失败了。ViewController
到CusFormViewController
,那么你应该在prepareForSegue:
中而不是在viewDidLoad
.中设置委托
作为附注,将一条NSLog
语句放入您的CusFormViewController
的viewDidLoad
中,并打印self.delegate
以检查属性设置。
发布于 2015-10-15 07:47:14
在执行函数viewDidLoad
之后,您的控制器formVC
将被释放。在formVC上创建强引用,例如:
@interface ViewController ()<CusFormViewControllerDelegate>
{
CusFormViewController *_formVC;
}
- (void)viewDidLoad {
[super viewDidLoad];
_formVC = [[CusFormViewController alloc] init];
[formVC setDelegate:self];
}
发布于 2015-10-15 08:32:58
请尝试使用以下方法创建CusFormViewController实例
nilinstantiateViewControllerWithIdentifier:@"IDENTIFIER_OF_YOUR_ * CusFormViewController [ storyboardWithName:storyboardName _formVC=:UIStoryboard CusFormViewController"];
https://stackoverflow.com/questions/33142598
复制