2012-05-25 133 views
3

我有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 

編輯: 我不使用界面生成器在所有。

回答

2

除非我誤解了這個問題,否則沒有任何竅門。

如果在主視圖控制器中定義了(IBAction)buttonPressed:(id)sender,則它由iPad視圖控制器子類繼承。因此,當iPad視圖控制器設置其按鈕時,將其指定爲屬於self的選擇器應該可以正常工作。

+0

很抱歉忘了指定,我根本沒有使用接口生成器。 – darksky

+0

這應該對繼承邏輯沒有影響。如果按鈕在控制器代碼中被定義,那麼'addTarget:'方法仍然可以指定'self'和超類中的選擇器。 –

+0

哦 - 該按鈕不在iPad的視圖控制器的類中。它在UIView類中被初始化(並設置爲'self.view')在繼承了主視圖控制器的iPad視圖控制器中。所以'UIView'是一個擴展自定義'UIView'的不同類。 – darksky

21

你的問題是有點混亂,但如果我明白了,你可以用這樣的代碼來設置按鈕:

[button addTarget:yourObject action:@selector(yourMethod:) forControlEvents:UIControlEventTouchUpInside]; 

所以你設置addTargetMainViewController實例,並設置動作無論你想在MainViewController內調用什麼方法。只要您的方法接受IBAction,您也應該可以在Interface Builder中執行此操作。

+0

addTarget應該是你的ipad viewcontroller的一個實例,那麼這個工作完美 – iTukker

+0

我將如何創建'yourObject'?這是視圖結束的VC。在這種情況下,我不能這樣做:'thisVC * vc = [ThisVC alloc] init]'因爲它已經被創建了。我需要一種方法來從UIView引用主視圖控制器。 UIView不是在iPad的視圖控制器中創建的,而是在不同的類中創建的(請參閱下面的註釋)。 – darksky

+0

您應該在您的應用程序委託(或您認爲合適的任何位置)中創建一個屬性,以保存指向該視圖控制器的指針。因此,在您的應用程序委託.h文件中,放入:@property(nonatomic,retain)UIViewController * myViewContoller;'並設置每當創建視圖控制器時。比你可以總是得到你的應用程序委託,並找到像這樣的視圖控制器:'[(AppDelegate *)[[UIApplication sharedApplication] delegate] myViewController];' – woz