1

我拥有的是应用程序顶部的三个按钮。

这三个按钮将始终出现在所有视图控制器上。

当我单击按钮时,将采取相应的操作。

由于我们在所有视图控制器中都有这个,我计划的是我将在某处定义方法,我将在单击此按钮时调用它。

我这样做是因为我将编写一次方法并在任何地方调用它们。

否则我必须为所有视图控制器编写方法,如果以后有更改,我将不得不为所有视图控制器做。

知道我怎样才能达到同样的效果吗?

我想要做的是在一个 UIViewController 中定义一些方法并在许多不同的 ViewController 中调用该方法。

4

6 回答 6

2

考虑创建您自己的容器视图控制器并将您的真实内容视图控制器添加为子项(使用addChildViewController:)。然后,您的容器视图控制器可以管理全局按钮及其操作,而不会影响任何实际的内容视图控制器。

于 2013-09-25T21:45:21.713 回答
1

除了拥有容器视图控制器之外,另一种技术是让每个视图控制器子类化项目中的另一个视图控制器。

@interface MainViewController : UIViewController; // implements your buttons and their actions

@interface OneViewController : MainViewController;
@interface TwoViewController : MainViewController;
@interface ThreeViewController : MainViewController;
于 2013-09-25T21:48:04.160 回答
1

尽管子类化是一种选择,但使用 Objective-C 类别会给您更大的灵活性。

创建一个扩展 UIViewController 的类别:

@interface UIViewController (SharedLogic)

- (void)didPressFirstButton:(id)sender;
- (void)didPressSecondButton:(id)sender;
- (void)didPressThirdButton:(id)sender;

@end

任何类为每个按钮指定目标/动作对都需要#import这个类别,否则你应该得到你想要的行为。

于 2013-09-25T21:56:22.207 回答
0

你可以用代表来做这件事……这里有一个很好的解释:

如何设置一个简单的委托来在两个视图控制器之间进行通信?

于 2013-09-25T21:57:28.760 回答
0

我所做的如下,它正在工作。

创建的 UIViewControllerTopBarViewController对所有人来说都是通用的。

TopBarViewController.h

#import <UIKit/UIKit.h>
@interface TopBarViewController : UIViewController
- (IBAction)clickedSetting:(id)sender;
@end

TopBarViewController.m

#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];
}

@property (nonatomic, retain) TopBarViewController *topBarViewCon;在 .h 文件中,并在 .m 文件中合成了这个属性。

这是正确的方式这是错误的方式吗?

于 2013-09-25T22:04:49.650 回答
0

考虑使用 NSNotificationCenter 将 UI 事件广播到代码库中的不同位置。

于 2013-09-25T22:05:56.937 回答