将选择器添加到UIButton
我有ViewController
,然后是两个不同的ViewControllers
,它们扩展了主要的ViewController
,一个用于iPhone,另一个用于iPad。将选择器添加到UIButton
iPad的ViewController
实例化一个单独的扩展UIView
并将其设置为它自己的视图。该视图有一些按钮,我想将其选择器方法添加为主要的ViewController
中的一些方法。这怎么能实现?
所以这里的形象化这种方式:
Main ViewController
| iPhone ViewController
| iPad ViewController
| Some UIView Class --> Button must invoke method in Main View Controller
编辑: 我不使用界面生成器在所有。
除非我误解了这个问题,否则没有任何窍门。
如果在主视图控制器中定义了(IBAction)buttonPressed:(id)sender
,则它由iPad视图控制器子类继承。因此,当iPad视图控制器设置其按钮时,将其指定为属于self
的选择器应该可以正常工作。
你的问题是有点混乱,但如果我明白了,你可以用这样的代码来设置按钮:
[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside];
所以你设置addTarget到MainViewController
实例,并设置动作无论你想在MainViewController
内调用什么方法。只要您的方法接受IBAction
,您也应该可以在Interface Builder中执行此操作。
addTarget应该是你的ipad viewcontroller的一个实例,那么这个工作完美 – iTukker
我将如何创建'yourObject'?这是视图结束的VC。在这种情况下,我不能这样做:'thisVC * vc = [ThisVC alloc] init]'因为它已经被创建了。我需要一种方法来从UIView引用主视图控制器。 UIView不是在iPad的视图控制器中创建的,而是在不同的类中创建的(请参阅下面的注释)。 – darksky
您应该在您的应用程序委托(或您认为合适的任何位置)中创建一个属性,以保存指向该视图控制器的指针。因此,在您的应用程序委托.h文件中,放入:@property(nonatomic,retain)UIViewController * myViewContoller;'并设置每当创建视图控制器时。比你可以总是得到你的应用程序委托,并找到像这样的视图控制器:'[(AppDelegate *)[[UIApplication sharedApplication] delegate] myViewController];' – woz
很抱歉忘了指定,我根本没有使用接口生成器。 – darksky
这应该对继承逻辑没有影响。如果按钮在控制器代码中被定义,那么'addTarget:'方法仍然可以指定'self'和超类中的选择器。 –
哦 - 该按钮不在iPad的视图控制器的类中。它在UIView类中被初始化(并设置为'self.view')在继承了主视图控制器的iPad视图控制器中。所以'UIView'是一个扩展自定义'UIView'的不同类。 – darksky