dismissViewControllerAnimated完成方法无法正常工作

5

这是我的应用程序设计。我有一个 mainController 控制器,它呈现了 secondViewController 视图控制器。现在,我想要取消显示 secondViewController 并随后调用 mainController 上的 aMethod 方法,代码如下:

[self dismissViewControllerAnimated:YES completion:aMethod];

但是这给了我一个错误:使用未声明的标识符'aMethod'

显然我没有正确地使用完成处理程序,但我无法找出正确的方法。

3个回答

13

我想这就是你所寻找的内容。

[self dismissViewControllerAnimated:YES completion:^{            [self.mainController aMethod];
        }];

在上述代码中,您需要在区块外声明self并使用它,如下所示:
__block SecondViewController *object = self;

[self dismissViewControllerAnimated:YES completion:^{
                [object.mainController aMethod];
            }];

为了避免在块中保留self

更新:

现在已经明白了问题。您需要在secondViewController的.h文件中声明mainController为属性。之后,当您从maincontroller呈现secondViewController时,您需要将其设置为:

secondViewController.maincontroller = self;
[self presentViewController:secondViewController animated:YES completion:Nil];

在您的SecondViewController.h文件中,
@property(nonatomic, assign) MainController *mainController;

在你的SecondViewController.m文件中,
@synthesis mainController;

更新2:

如果您不想将maincontroller声明为属性,请尝试这种方法。我不确定这是否是正确的做法,但看起来以前可以用。

 MainController *mainController = (MainController *)[self.view.superview nextResponder];

    [self dismissViewControllerAnimated:YES completion:^{
                    [mainController aMethod];
                }];

更新3(建议):

这应该适用于你。检查一下。

 MainController *mainController = (MainController *)self.parentViewController;

    [self dismissViewControllerAnimated:YES completion:^{
                    [mainController aMethod];
                }];

如果我执行 __block YouViewController *object = self,那么我设置的不是被呈现的视图控制器,而是被解除显示的视图控制器,对吗? - Jonah Katz
哦,好的,我看到你的更新了。对象没有mainController,它不知道那是什么。 - Jonah Katz
secondViewController.maincontroller = self; 这行代码并不合理,因为 secondviewcontroller 没有 maincontroller。 - Jonah Katz
我已经更新了三种不同的方法。请尝试最后一种方法。您可以将其用作self.parentViewController。如果这不起作用,请尝试其他方法。 - iDev
parentViewController不起作用,但这是因为我正在使用tabbarcontroller的问题.. 我正在进行第二次更新。 - Jonah Katz
更新3对我有用。现在我必须弄清楚为什么它说找不到aMethod。 - Opy

1
你想要类似这样的东西:
[self dismissViewControllerAnimated:YES completion:^{            ...            <do something on completion here>            ...        }];

同样的错误...哪个控制器接收完成方法? - Jonah Katz
这是在mainController中声明的一个方法,该控制器在调用dismissviewcontrolleranimated时显示。 - Jonah Katz
所以你需要在块内部使用类似 [mainController aMethod]; 这样的语句。 - EarlyRiser

-3

声明如下:dismissViewControllerAnimated:YES completion:Nil

希望能对您有所帮助。


不,那并没有帮助。我试图在当前视图控制器被解除显示后调用将要显示的视图控制器上的一个方法...这就是我使用完成处理的原因。 - Jonah Katz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接