我遇到的问题是我想通过单击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];
答案 0 :(得分:0)
是的,在这种情况下,委托是一个不错的选择,基本上你需要在页脚视图中有一个委托对象。然后在运行时将委托设置为TabBarController。
当用户点击该按钮时,请使用您的方法[delegate method]
这是一个非常重要的设计模式目标-c,如果您可以按照本教程完全理解委托,那将非常有用。
答案 1 :(得分:0)
我同意代表团很重要,非常值得学习,但解决同样问题的另一种方法是:
在btnClicked的方法定义中,请调用以下代码
if([self tabBarController]) {
[[self tabBarController] methodToCall];
}
由于您的视图控制器应嵌入标签栏控制器,因此它将设置此属性。然后,您可以调用tabBarController类中包含的任何公共方法。