我有一个名为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];
答案 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];