2012-01-24 14 views
3

我有3個按鈕的主視圖。點擊任何按鈕添加一個SubView。的iOS - 通過發送器(按鈕)名稱addSubview

的按鈕有不同的稱謂,並都連接到IBAction爲「SWITCHVIEW」

的「SWITCHVIEW」代碼如下。

- (IBAction)switchView:(id)sender{ 
    secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil]; 
    [self.view addSubview:myViewController.view]; 
} 

「secondView」加載正確,一切正常。

問題是我希望能夠知道哪個按鈕是發件人。

我不想創建3子視圖,每個按鈕。代碼和XIB是絕對相同>

唯一的差別將是我想設置在所述第二視圖中的變量(viewDidLoad方法),這取決於誰是發件人(哪個按鈕被點擊)

這可能嗎?或者我需要創建3個子視圖 - 每個按鈕一個?

非常感謝您的幫助!

回答

16

您可以標識與標籤屬性不同的按鈕。 例如用你的方法:

-(IBAction)switchView:(id)sender { 
    UIButton *button = (UIButton*)sender; 
    if (button.tag == 1) { 
     //TODO: Code here... 
    } else if (button.tag == 2) { 
     //TODO: Code here... 
    } else { 
     //TODO: Code here... 
    } 
} 

標籤屬性可以通過InterfaceBuilder設置。 希望這有助於。

+0

THANKs,但也許我沒有正確解釋問題。我知道如何讓發送者進入switchView方法。 問題在此之後。 switchView方法啓動子視圖。這個子視圖有自己的secondView.XIB,secondView.h和secondView.m文件。 裏面secondView.m((void)viewDidLoad方法)我想找出哪個按鈕啓動secondView.XIB – user885483

+0

也許這是不可能的。解決方法是將發件人標記存儲在switchView方法內的「全局變量」中。 (我可以將它存儲爲NSUserDefaults中的一個鍵)。然後在secondView子視圖中檢索它。 – user885483

+2

好的,理解。那麼我的方法是在你的 - (IBAction)switchView:(id)sender中調用新的視圖控制器;方法並將sender.tag作爲(id)initWith ...調用的屬性傳遞。 例如 MyViewController * view = [[MyViewController alloc] initWithSenderTag:button.tag]; 但是,您仍然必須將button.tag作爲全局變量存儲在您的MyViewController中,以在您的 - (void)viewDidLoad;方法。 – Markus

4

我覺得你可以在2種方式解決:

  1. 創建這樣一個屬性:在您的視圖 - 控制 @property (nonatomic, strong) IBOutlet UIButton *button1, *button2, *button3; 和按鈕上的XIB引用出口鏈接到他們。
  2. 給你的xib上的每個按鈕添加一個不同的標籤,並要求發件人的標籤UIButton *b=(UIButton*)sender; b.tag;,比如馬庫斯發佈的詳細信息。
0

解決我的問題,這一切都歸結爲在mainView和subView之間傳輸數據。

在我mainView.h我宣佈一個NSString及其@property

...

NSString *btnPressed; 

} 
@property(nonatomic, retain) NSString *btnPressed; 

...

然後在我的SWITCHVIEW方法我做內mainView.m這個:

- (IBAction)switchView:(id)sender{ 

secondView *myViewController = [[secondView alloc] initWithNibName:@"secondView" bundle:nil]; 

btnPressed = [NSString stringWithFormat:@"%i", [sender tag]]; 

[myViewController setBtnPressed:self.btnPressed]; 

[self.view addSubview:myViewController.view]; 
} 

上面的代碼中的這一行實際上負責將數據傳輸到新創建的子視圖:

[myViewController setBtnPressed:self.btnPressed]; 

然後在我的第二個視圖中。h我聲明完全相同的NSString * btnPressed和它的@屬性(雖然這是一個完全不同的對象比在主要聲明的一個完全不同的對象)

然後在我的secondView.m我得到的按鈕按下的價值我感興趣

- (void)viewDidLoad { 
[super viewDidLoad]; 

int theValueOfTheButtonPressed = [self.btnPressed intValue]; 
} 

這很好。

別忘了@synthesize btnPressed;以及[btnPressed release];在mainView.m和secondView.m