Ios 交换视图并触发另一个类中的方法

Ios 交换视图并触发另一个类中的方法,ios,Ios,我正在使用故事板,我希望当用户单击某个按钮(SwapViewAndTriggerMethod)时,视图会更改为另一个由第二个视图控制器定义的按钮(SecondView),然后调用SecondView.m中的某个方法(MyMethod)。我正在使用下面的代码,这成功地将我带到了另一个视图……但是MyMethod没有被调用。请问我怎样才能做到这一点?干杯 - (IBAction) SwapViewAndTriggerMethod:(id)sender { UIViewController *cont

我正在使用故事板,我希望当用户单击某个按钮(SwapViewAndTriggerMethod)时,视图会更改为另一个由第二个视图控制器定义的按钮(SecondView),然后调用SecondView.m中的某个方法(MyMethod)。我正在使用下面的代码,这成功地将我带到了另一个视图……但是MyMethod没有被调用。请问我怎样才能做到这一点?干杯

- (IBAction) SwapViewAndTriggerMethod:(id)sender
{
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"SecondView_storyboard"];

[self presentViewController:controller animated:YES completion:nil];

[instanceOfGS2controlller MyMethod:nil];
}
这是我得到的错误: 警告:试图在其视图不在窗口层次结构中的上显示! 注意:MyMethod调用选择器来选择照片并将其分配给图像视图。

一些事情

1.当您演示新的viewController时,它的生命周期开始,这意味着它的ViewDidLoad(和其他函数)被调用,因此您可以在那里调用您的函数


2.一般来说,你可以使用NSNotificationCenter在你的应用程序中发布消息,但我不确定这是你在这里的最佳选择

如果你在调用另一个视图的方法时调用了该方法,你有两个选择:(1)使函数可公开访问,或(2)使用-(void)prepareforsgue:(UIStoryboardSegue*)segue sender:(id)发送方和调用视图中的方法时未加载。

您不能从另一个控制器调用呈现选择器视图控制器的方法,因为正如错误所述,SecondView\u ViewController的视图尚未在窗口层次结构中。您可以在SwapViewAndTriggerMethod:中设置一个标志,并在SwapViewAndTriggerMethod:的视图中使用该标志来显示选择器

- (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\u ViewController中执行此操作

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    if (self.presentPicker) 
        // present your picker here
    self.presentPicker = NO;
}

情节提要中的视图控制器是否具有指向该对象/视图控制器实例的标识符?另外,当分配
controller
s类型时,我建议将其设置为
UIViewController
s子类名称,而不仅仅是
UIViewController
这是我得到的错误:警告:尝试在上显示,其视图不在窗口层次结构中!注意:MyMethod调用选择器选择照片并将其分配给图像视图。关于选项1:我不能在ViewDidLoad中始终触发该方法。我希望只有在调用另一个视图中的方法时才会触发它…您能解释一下原因吗?也许您可以在userDefaults中保存一个值,说明是否需要调用该函数,因为我希望用户能够在不调用该方法的情况下切换到该视图,同时从另一个视图切换到该视图并调用该方法。我知道我可以为此在NSUserdefauls中保存一个标志,但我正在寻找更好的类间通信方式。我没有使用NSNotificationCenter的经验,但这可能不是类间交互的最佳方式。无论如何,感谢您的帮助我已经在SecondView\u ViewController中定义了一个BOOL presentPicker,但是当我编译它时说:在“SecondView\u ViewController*”类型的对象上找不到属性“presentPicker”@jeddi,您是否在.h文件中声明了该属性?是的,我声明了@接口SecondView_ViewController:UIViewController{BOOL presentPicker;}@jeddi,这不是一个属性,这是一个ivar,就像您声明它的方式一样。因此,要么创建一个属性,要么将您的ivar称为“presentPicker”,而不是“self.presentPicker”。谢谢。我正在慢慢地到达那里。。我添加了@property(非原子,赋值)BOOL presentPicker;在h。并在m。但它不起作用…:-(