我有一个ViewController,我在其中创建了一个Modal ViewController。我在我的模态中有一个SEL值,当我从父实例中实例化时,我设置了该值。
setDateViewController.selectorName = @selector(myMethod:);
在我的模态中,我试图将此SEL称为:
[[self parentViewController] performSelector:self.selectorName withObject:selectedDate afterDelay:.5];
{selectedDate}显然是我的模态中的一个值。
我没有得到任何错误或堆栈,但是,我的父亲的SEL(方法)永远不会被调用。出于某种原因,我认为这应该有效,但有些事情告诉我,我已经偏离了轨道。
感谢。
答案 0 :(得分:1)
也许你会考虑在你的模态中添加一个委托协议,允许它在父节点上调用方法。
快速(未经测试)示例:
// MyController.h
@protocol MyControllerDelegate;
@interface MyController : UIViewController
{
id<MyControllerDelegate> delegate;
}
@end
@protocol MyControllerDelegate <NSObject>
- (void)methodToCall:(id)sender;
@end
// MyControler.m
@implementation MyController
- (void) loadView
{
[super loadView];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(20.0f, 20.0f, 50.0f, 30.0f);
[btn setTitle:@"blah" forState:UIControlStateNormal];
[btn addTarget:self.delegate
action:@selector(methodToCall:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
@end
// ParentController.h
@interface ParentController : UIViewController<MyControllerDelegate>
{
}
@end
// ParentController.m
@implementation ParentController
- (void)methodToCall:(id)sender
{
NSLog(@"HERE");
}
@end
只需确保在创建模态控制器时,将其委托给父母的委托:
MyController *controller = [[MyController alloc] init];
controller.delegate = self;
[self presentModalViewController:controller animated:YES];
答案 1 :(得分:1)
我猜[self parentviewcontroller]没有返回任何内容。 试试UiviewController * v = [self parentviewcontroller];并检查是否为零。最有可能它应该是零。否则,如果它指向另一个不同类的对象,那么它就会崩溃。请做一件事。你应该设置bot你需要调用的对象和方法。如果有任何问题,IT部门将解决任何问题。
setDateViewController.selectorDelegate = self;
setDateViewController.selectorName = @selector(myMethod:);
从父类这样调用。因此,您可以动态指定方法,并且您要调用的对象可以提供更大的灵活性。
并使用, [selectorDelegate performSelector:self.selectorName withObject:selectedDate afterDelay:.5];
这应该可以解决任何问题。