我正在使用故事板,我希望当用户点击某个按钮(SwapViewAndTriggerMethod)时,视图会更改为由第二个视图控制器定义的另一个(SecondView),然后是SecondView中的某个方法(MyMethod) .m被称为。我正在使用下面的代码,这成功地将我带到另一个视图....但MyMethod没有被调用。我怎么能实现这个目标呢?干杯!
- (IBAction) SwapViewAndTriggerMethod:(id)sender
{
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondView_storyboard"];
[self presentViewController:controller animated:YES completion:nil];
[instanceOfGS2controlller MyMethod:nil];
}
这是我得到的错误: 警告:尝试出现< SecondView_ViewController:0x13f634f60>其视图不在窗口层次结构中! 注意:MyMethod调用选择器来选择照片并将其指定给图像视图。
答案 0 :(得分:1)
你不能从另一个控制器中调用提供选择器视图控制器的方法,因为正如错误所示,SecondView_ViewController的视图还不在窗口层次结构中。您可以在SwapViewAndTriggerMethod:中设置一个标志,并在SwapViewAndTriggerMethod的viewDidAppear中使用它来显示选择器,
- (IBAction) SwapViewAndTriggerMethod:(id)sender {
SecondView_ViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondView_storyboard"];
[self presentViewController:controller animated:YES completion:nil];
controller.presentPicker = YES; // presentPicker is a BOOL property that you need to add to SecondView_ViewController
}
然后,在SecondView_ViewController中,执行此操作,
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.presentPicker)
// present your picker here
self.presentPicker = NO;
}
答案 1 :(得分:0)
一些事情
1.当你呈现一个新的viewController时,它的生命周期开始了,意味着它的ViewDidLoad(和其他函数)被调用,所以你可以在那里调用你的函数
2.一般情况下,您可以使用NSNotificationCenter在您的应用中发布消息,但我不确定这是您的最佳选择
答案 2 :(得分:0)
如果在调用另一个视图的方法时调用该方法,则有两个选项:(1)使函数可公开访问iOS: How to define public methods?,或(2)使用 - (void)prepareForSegue:(UIStoryboardSegue * )segue发送者:( id)发送者并在视图中调用该方法加载。