创建一个类来获取所有按钮代理

时间:2014-09-17 09:34:47

标签: ios objective-c xcode

我有一个名为UIViewController的{​​{1}}课程。此类已连接到其连接视图的classA个出口(来自故事板)。

我想做的是创建另一个buttons,它将处理所有按钮操作。 我的问题是,如何设置classB中按钮的代理人才能在classA中处理,以及如何使classB在所有时间内保持活着。

我在想这个。

在classA中的

:(具有按钮出口的主视图控制器)

classB

我的主要问题是,当classB处理动作时,让我说他必须打开一些邮件编辑器视图控制器,classB如何打开那个邮件编写器" inside" classA视图?甚至是我希望在classA中显示的一些ClassB *buttonsResponder=[[classB alloc]init]; //initialize buttons class [self.button addTarget:buttonsResponder action:@selector(do:) forControlEvents:UIControlEventTouchDown]; ,但来自 UIView

我正在考虑发送一个指向当前视图控制器的指针作为按钮的参数,但我不知道如何,以及它是否会起作用:

  

[self.button addTarget:buttonsResponder action:@selector(do:and   控制器指针?)forControlEvents:UIControlEventTouchDown];

2 个答案:

答案 0 :(得分:1)

在ClassA实例中保持ClassB活着的最好方法是使它成为类扩展中的私有属性:

// In CalssA
@property (nonatomic, strong) ClassB *buttonsResponder;

你需要在某处分配它,viewDidLoad是个好地方:

self.buttonsResponder = [[classB alloc]init];

并且在同一方法中,您可以将其设为按钮委托:

[self.button addTarget:self.buttonsResponder action:@selector(do:) forControlEvents:UIControlEventTouchDown];

//扩展

如果要从ClassB中呈现另一个视图控制器,可以创建属性以在classB中保存对classA的弱引用:

// In ClassB.h
@property (nonatomic, weak) ClassA *myClassA;

在viewDidLoad中初始化classB时传递对classA的引用:

// In ClassA.m
self.buttonsResponder = [[classB alloc]init];
self.buttonsResponder.myClassA = self;

当你想要呈现另一个视图控制器时,可以从classB:

进行
[self.myClassA presentViewController:...];

答案 1 :(得分:1)

  

[self.button addTarget:self.buttonsResponder action:@selector(do :)   forControlEvents:UIControlEventTouchDown];

如果你想从buttonsResponder:

呈现另一个viewcontroller
[self.window.rootViewController presentViewController:anotherViewController animated:YES completion:nil];