網頁

2013年2月22日 星期五

IBAction and IBOutlet (1) 取得user 在picker 中所選的兩個詞組

[iphone app 開發]

如同之前的例子,在picker view 上,現在有了完整的資料可以讓user
點選,而下方也有個寄出的按鈕,很明顯的,我打算把使用者選好的
內文加上一些固定的話語當做email來寄出。


在寄出(跟email行為)扯上關係之前,我想先確認,我能正確取得user 所選取的

兩個字詞嗎? 也就是能夠取得picker view裡正確的值嗎?






先看一下IBAction 和 IBOutlet.

IBAction = Interface Builder Action.

所以,當"寄出"的按鈕按下時,你知道,將會有個method 準備處理這個動作。

這個會宣告在你的 viewcontroller.h , 且實作在.m
ex: -(IBAction)sendButtonPressed:(id)sender { .......處理 }
其中,sendButtonPressed 這個method name 隨便取。

然後,一樣的,想要讓UI的動作真的連結上程式碼,一定要按右鍵連結....。

我們認為 那個 "寄出"的按鈕當使用者"按下按鈕且等到放開時"才代表
這個按鈕按下且完成,所以我們選擇 Touch Up inside 去連結 sendButtonPressed
這個method, 這樣才是真的完成,當按下按鈕,會去跑sendButtonPressed 的function.




ok, 你可以加個NSLog(@"Button Pressed"); 在 sendButtonPressed 中,看看這個IBAction
method 是不是正確的被連結到UI上了。




好!到這步,你預想的到,其實我們最後是要在這個sendButtonPressed method 中....

1.取得user 在picker 中所選的兩個詞組。
2.丟給email 工具,真的寄出去。


為了1. 這時候就需要 IBOutlet 來幫忙了

IBOutlet = 有它,程式碼可以改變UI上的任何東西。

換言之,IBOutlet 中有UI上某個值的reference,所以能改變它。
反過來講,如果我想得到UI上的某個值,我也能從IBOutlet 中取得。


IBOutlet = 有它,可得到UI上的值到程式碼中修改。


範例:

viewcontroller.h


<UIPickerViewDataSource, UIPickerViewDelegate>{
    NSArray* activities_;
    NSArray* actions_;
    UIPickerView *emailPicker_;//之後為了取得picker view 的內容
}


//當寄出按鈕按下時使用
-(IBAction)sendButtonPressed:(id)sender;

//IBOutlet 宣告,讓IB知道你有某個東西要連結
@property (nonatomic, retain) IBOutlet UIPickerView *emailPicker;




viewcontroller.m


//synthesize 內容特性,為了連結到實作檔中
@synthesize emailPicker = emailPicker_;



-(IBAction)sendButtonPressed:(id)sender{

    NSString *theMessage =[NSString stringWithFormat:@"我正在%@,%@,謝謝",
                          [activities_ objectAtIndex:[emailPicker_ selectedRowInComponent:0]],
                          [actions_ objectAtIndex:[emailPicker_ selectedRowInComponent:1]]
                          ];
    NSLog(@"%@",theMessage);
    NSLog(@"Button Pressed");

}







這時候,按下"寄出"按鍵之後,在右邊就可以看到NSLog 的輸出了。


好啦! 先在可以準備把這整個得到的字串( theMessage ),丟給email 去寄了。

下篇繼續。













沒有留言:

張貼留言