【问题标题】:How to call a method in the rootviewcontroller from a presented modal view controller at the time of dismissing the model view如何在关闭模型视图时从呈现的模式视图控制器调用 rootviewcontroller 中的方法
【发布时间】:2012-05-16 20:38:55
【问题描述】:

我有一个主视图控制器,它在应用启动时显示,它包含一个带有中心凸起按钮的标签栏,用于捕获图像。我已经展示了一个带有 UIimagepicker 控制器的模型视图控制器,上传图像后我需要关闭模型并在主视图控制器中调用 (UIimagepicker) 的方法

为此,我编写了这样的代码 .h 文件

ViewController *viewController;
@property (retain) ViewController *viewController;

.m 文件

    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{

    if(buttonIndex == 0)
    {

        [self dismissModalViewControllerAnimated:YES];
        [viewController btnTap];

        NSLog(@"uploaded");
    }
    else{
         [self dismissModalViewControllerAnimated:YES];
    }

}

在视图控制器.m

-(void)btnTap{

         [self.actForImage  showFromTabBar:tabBarController.tabBar];
        // act for image is the action sheet
        // this method will be called when click on the center button of tabbar
 }

我保留了一个断点并检查了 -(void)btnTap 方法没有被调用。 有没有其他方法可以调用主视图控制器中的方法。

【问题讨论】:

    标签: iphone objective-c ios methods uiviewcontroller


    【解决方案1】:

    代表就是答案!

    你需要做的是在你的 ModalViewController 中设置一个协议。而不是直接在您的 modalViewController 中关闭它,您应该在委托方法中关闭它。

    看看这个答案:

    Can't dismiss modal view when tap a button

    这是在委托类中关闭 modalviewcontroller 的方法。 在 ViewController 类中将其关闭后,您可以调用任何其他您喜欢的方法。

    编辑: 更广泛的答案写在 cmets。

    【讨论】:

    • 我已经尝试了该解决方案,但它对我不起作用。因为我也在展示的 modelVC 中使用导航。我想在最后一个屏幕上关闭视图,因为我正在做 [self dismissModalViewControllerAnimated:YES];但我认为根据您的回答,只能从 modelVC 调用委托
    • 嗯.. 调用 ModalVC 的 VC 可以调用单个类来安排委托,并让该单个类创建您的多个视图,并在其上使用您的导航。每次导航时,您都会向 ModalVC 中的控制器类发送一条消息,完成后,您不会直接关闭,而是向控制器发送一条消息,并让他处理调用 ModalVC 的 ViewController 的委托。如果你知道我的意思..
    • 这意味着你有一个名为 ModalVC 的 VC 类。您有一个控制器类,用于安排 ModalVC 内的导航。您有多个从 Controller 类创建的视图,当它们完成后,它们会向控制器发送一条消息,然后控制器创建所需的下一个视图。当您在 ModalVC 的最后一个屏幕上时(或者当您无论如何都想关闭您的 modalVC 时)您向您的 Controller 类发送一条消息并告诉他按照我上面描述的方式关闭 ModalVC。
    • 太广泛了,短时间内做不出来。您需要了解的是,您需要一个 MainController 类来安排dismissalDelegate 和屏幕上的视图导航。以这样一种方式,您可以在该类中手动推送和弹出视图。还要检查最后一个视图是否在屏幕上或按下取消按钮,以便您可以调用解除委托方法和您想要的额外功能。
    • 终于成功了,我创建了委托方法并将控制权传递给控制器​​类并调用了我需要的方法。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多