使用UIView中的按钮从另一个ViewController触发方法

时间:2016-02-22 16:06:04

标签: ios objective-c iphone uiview

我遇到的问题是我想通过单击UIView(页脚)内的按钮来调用navigationController中的方法。当我按下按钮时,它应该调用方法I尝试访问以下代码中的打开录像机。

有人告诉我,我可以实现委托方法或使用NSNotification。以下是我的内容:

我的页脚(ESPhotoDetailsFooterView.m)有我创建的按钮。我的页脚只包含一个UIView。

我尝试在我的页脚中访问的方法位于(ESTabBarController.m)

这是我按下按钮时尝试触发的内容:

RecorderViewController *viewController = [[RecorderViewController alloc] init];
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [self.navController pushViewController:viewController animated:NO];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self presentViewController:self.navController animated:YES completion:nil];
    });

我是Objective C的新手,了解基础知识。我无法弄清楚我需要做些什么才能做到这一点。任何帮助将不胜感激。

按钮的代码如下:

// Create a standard UIButton programmatically using convenience method
    UIButton *camButton = [UIButton buttonWithType:UIButtonTypeCustom];

    // Set the location (x,y) and size (width,height) of the button
    camButton.frame = CGRectMake(9.0f, 8.0f, 35.0f, 35.0f);

    // Create UIImages from image resources in your application bundle
    // using convenience methods (no need to release)
    UIImage *normal = [UIImage imageNamed:@"BingComm"];
    UIImage *highlighted = [UIImage imageNamed:@"BingCommClick"];

    // Set the button's background to an image
    [camButton setBackgroundImage:normal forState:UIControlStateNormal];
    [camButton setBackgroundImage:highlighted forState:UIControlStateHighlighted];

    // Add the target-action for the touch event
    #pragma GCC diagnostic ignored "-Wundeclared-selector"

    [camButton addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

    [self.mainView addSubview:camButton];

2 个答案:

答案 0 :(得分:0)

是的,在这种情况下,委托是一个不错的选择,基本上你需要在页脚视图中有一个委托对象。然后在运行时将委托设置为TabBarController。 当用户点击该按钮时,请使用您的方法[delegate method]

为您委派代理

这是一个非常重要的设计模式目标-c,如果您可以按照本教程完全理解委托,那将非常有用。

http://www.alexefish.com/post/522641eb31fa2a0015000002

答案 1 :(得分:0)

我同意代表团很重要,非常值得学习,但解决同样问题的另一种方法是:

在btnClicked的方法定义中,请调用以下代码

if([self tabBarController]) {
     [[self tabBarController] methodToCall];
}

由于您的视图控制器应嵌入标签栏控制器,因此它将设置此属性。然后,您可以调用tabBarController类中包含的任何公共方法。