我的应用程序顶部有三个按钮。
这三个按钮将始终显示在所有视图控制器上。
单击按钮时,将执行相应的操作。
正如我们在所有viewcontroller中都有这个,我正在计划的是我将在某处定义方法,我将在单击此按钮时调用。
我这样做是因为我会编写一次方法并在任何地方调用它们。
ELse我必须为所有视图控制器编写方法,如果以后有更改,我将不得不为所有视图控制器做。
任何想法我怎样才能实现同样的目标?
我想要做的是在一个UIViewController中定义一些方法,并在许多不同的ViewController中调用该方法。
答案 0 :(得分:2)
考虑创建自己的容器视图控制器,并将您的真实内容视图控制器添加为子项(使用addChildViewController:
)。然后,容器视图控制器可以管理全局按钮及其操作,而不会影响任何实际的内容视图控制器。
答案 1 :(得分:1)
除了拥有容器视图控制器之外,另一种技术是让每个viewControllers为项目中的另一个viewcontroller创建子类。
@interface MainViewController : UIViewController; // implements your buttons and their actions
@interface OneViewController : MainViewController;
@interface TwoViewController : MainViewController;
@interface ThreeViewController : MainViewController;
答案 2 :(得分:1)
虽然子类化是一种选择,但使用Objective-C类别将为您提供更大的灵活性。
创建一个扩展UIViewController的类别:
@interface UIViewController (SharedLogic)
- (void)didPressFirstButton:(id)sender;
- (void)didPressSecondButton:(id)sender;
- (void)didPressThirdButton:(id)sender;
@end
无论哪个类指定每个按钮的目标/操作对,都需要#import
这个类别,否则你应该得到你想要的行为。
答案 3 :(得分:0)
你可以用代表这样做......这里有一个很好的解释:
How do I set up a simple delegate to communicate between two view controllers?
答案 4 :(得分:0)
我所做的就是如下,它正在发挥作用。
创建UIViewController为TopBarViewController
,这对所有人来说都很常见。
#import <UIKit/UIKit.h>
@interface TopBarViewController : UIViewController
- (IBAction)clickedSetting:(id)sender;
@end
#import "TopBarViewController.h"
@interface TopBarViewController ()
@end
@implementation TopBarViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)clickedSetting:(id)sender {
NSLog(@"clickedSetting-TopBar");
// do your action here
}
@end
现在,当我点击MyViewController中的按钮时,我会调用以下操作。
- (IBAction)clickedSetting:(id)sender {
NSLog(@"self-clickedSetting");
topBarViewCon = [[TopBarViewController alloc] init];
[topBarViewCon clickedSetting:nil];
}
我在.h档案中有@property (nonatomic, retain) TopBarViewController *topBarViewCon;
&amp;在.m文件中合成此属性。
这种方法是错误的吗?
答案 5 :(得分:0)
考虑使用NSNotificationCenter将UI事件广播到代码库中的不同位置。