[iOS] 第十五課 分段控制4

追加按鈕的功能!

注意!只要在你連接方法到介面上之後你還要修改方法,那你一定要重新連接!

首先注意,我們要讓ViewController類採用一個協議,叫做UIActionSheetDelegate。

我們要使用一個類,叫做UIActionSheet。這個類是做什麼的呢?可以參考一下蘋果的手冊:

使用這個類,可以給使用者一組選擇項目,去進行給定的任務。你可以用action sheet告訴使用者正進行有潛在危險的動作。這個action sheet包含一個可更動的title和一個或一個以上的按鈕,每一個按鈕都對應一個可以採取的動作。


在把這些呈現出來之前,使用這個類的properties和方法去配置action sheet的訊息、style和按鈕,以及指定delegate給你的action sheet。當按鈕被點擊時,你的delegate物件應負責執行該按鈕對應的action而且應遵守UIActionSheetDelegate協議。可以參考UIActionSheetDelegate Protocol Reference 去看更多有關實作delegate的方法的資訊。

你可以從工具欄標籤欄按鈕欄項目,或從一個視圖提出一個action sheet當要決定如何呈現action sheet時,這個類會將starting view和目前的plateform列入考慮。當應用程式在iphone和iPod touch上運行時,action sheet通常會從擁有這個view的視窗底部往上滑起,當在iPad上運行時,action sheet會以popover的樣子呈現在螢幕上,以適當方式定錨在starting view上。點觸popover外的部份可以移開action sheet,就像是在自定義按鈕內輕觸一樣,你也能編程的關閉它。

當在iPad上呈現action sheet時,有時是不用設置取消按鈕的。如果你只是呈現action sheet,系統不會使用動畫去在popover內顯示action sheet。因為在popover外輕觸可以在不選擇item的情況下退掉action sheet,在預設情況下這會導致取消sheet。因此若設置取消按鈕,這只會導致混淆。然而,如果你有一個已存在的popover並且正用動畫在其他內容上面顯示一個action sheet,還是要有個取消按鈕比較好。可以參考 iOS Human Interface Guidelines

initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:


使用指定的起始參數初始化action sheet。
     - (id)initWithTitle:(NSString *)title 
             delegate:(id < UIActionSheetDelegate >)delegate 
     cancelButtonTitle:(NSString *)cancelButtonTitle 
destructiveButtonTitle:(NSString *)destructiveButtonTitle 
     otherButtonTitles:(NSString *)otherButtonTitles, ...
參數介紹:

title:顯示在action sheet的title部分,如果你不想顯示任何東西,你也可以設定成nil。
delegate:接受者的delegate物件。雖然也可以設定成nil,但delegate通常會響應action sheet中的觸擊,所以提供。
cancelButtonTitle:取消按鈕的title。 這個按鈕自動會倍加到action sheet內,並設定一個適當的index,這index 可由cancelButtonIndex property取得。這個按鈕以黑色顯示,表示它代表取消動作。如果你不要取消按鈕的話或是在iPad上呈現action sheet,那可以指定nil。
destructiveButtonTitle:破壞性按鈕的title。這個按鈕會自動被加到action sheet內,並且被指派一個適當的index,這個index可由destructiveButtonIndex property所取得。這個按鈕以紅色顯示,用來表示他代表一個破壞行為。如果你不想要破壞性按鈕,那你可以指定nil。
otherButtonTitle:為你想要加入的按鈕的title。這個參數包含了一個以nil結尾,以逗號區隔的一列字串。舉例來說,如果你要指明兩個額外的按鈕,你可以寫@"Button 1", @"Button 2", nil。
以上是參考蘋果的手冊。
接下來注意,要更改code:
-(IBAction)mainControlSwitched:(id)sender;
-(IBAction)switchChaneged:(id)sender;
-(IBAction)buttonPressed;
 
改好後:
-(IBAction)buttonPressed{
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Want to see an alert?"
                                                             delegate:self
                                                    cancelButtonTitle:@"cancel"
                                               destructiveButtonTitle:@"Yes, lets see it"
                                                    otherButtonTitles:nil];

    [actionSheet showInView:self.view];
}
 
注意delegate設定是self,這只是讓delegate物件是在這個類裡面。

好,下一堂課繼續! 

留言