如何在一个视图控制器中定义动作并在任何地方调用它们

时间:2013-09-25 21:39:27

标签: ios objective-c

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

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

单击按钮时,将执行相应的操作。

正如我们在所有viewcontroller中都有这个,我正在计划的是我将在某处定义方法,我将在单击此按钮时调用。

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

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

任何想法我怎样才能实现同样的目标?

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

6 个答案:

答案 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,这对所有人来说都很常见。

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

我在.h档案中有@property (nonatomic, retain) TopBarViewController *topBarViewCon;&amp;在.m文件中合成此属性。

这种方法是错误的吗?

答案 5 :(得分:0)

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