UIActionSheet 是一個由下往上彈出的選單,它的功能和使用方法都類似於 Alerts,但是還是有些微不同,下面就示範如何使用 UIActionSheet 來製作選單,請看以下程式碼。
在使用 UIActionSheet 之前,請先為您的程式加上代理,本示範是在 ViewController 中加入代理。
@interface UIActionSheetViewController : UIViewController<UIActionSheetDelegate> {
}
接下來就是在按鈕事件加入產生 UIActionSheet 的程式碼。
- (IBAction)onMenuButton:(id)sender {
UIActionSheet *actionSheet = [[[UIActionSheet alloc]initWithTitle:@"請選擇聯絡方式"
delegate:self
cancelButtonTitle:@"還是算了"
destructiveButtonTitle:@"特殊紅色選項"
otherButtonTitles:@"電話", @"E-Mail", nil]
autorelease];
//也可以透過此方式新增按鈕
[actionSheet addButtonWithTitle:@"MSN"];
//將actionSheet顯示於畫面上
[actionSheet showInView:self.view];
}
上述程式碼在設定方面大致都與 Alerts 相通,值得注意的是 UIActionSheet 並沒有辦法設定 message: 內文,並且多了一個紅色的特殊造型按鈕 destructiveButtonTitle:,在增加新的按鈕時也是從最下方加入,關於不同的地方大家可以參考Alerts 警告訊息的使用方法一文。
至於所觸發的按鈕事件寫法就與 Alerts 一模一樣了,同都是呼叫一個內建函式,使用索引 Index 並配合按鈕標題來做判斷。
//判斷ActionSheet按鈕事件
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
//將按鈕的Title當作判斷的依據
NSString *title = [actionSheet buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"電話"]) {
contentLabel.text = @"可惜我們目前還沒有電話";
}
else if([title isEqualToString:@"E-Mail"]) {
contentLabel.text = @"furnacedigital@gmail.com";
}
else if([title isEqualToString:@"MSN"]) {
contentLabel.text = @"可惜我們目前還沒有MSN";
}
}
最後如同 Alerts 使用方式一般,在不想出現的欄位也可以填上 nil 值,用來製作出不同的 UIActionSheet 風格。
- (IBAction)onAboutUsButton:(id)sender {
NSString *aboutString = @"鑫穎數位工作室 Furnace Digital Collaboration \n\nWe Are Furnace and Never Stop Burning...\n\n\nfurnacedigital@gmail.com";
UIActionSheet *actionSheet = [[[UIActionSheet alloc]initWithTitle:aboutString
delegate:nil
cancelButtonTitle:@"返回"
destructiveButtonTitle:nil
otherButtonTitles:nil]
autorelease];
[actionSheet showInView:self.view];
}
你好
回覆刪除問一個很奇怪的問題
我在ipad上使用UIActionSheet
照您上面的方法去宣告
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"請選擇聯絡方式"
delegate:self
cancelButtonTitle:@"還是算了"
destructiveButtonTitle:@"特殊紅色選項"
otherButtonTitles:nil];
然後我把 [actionSheet addButtonWithTitle:@"MSN"]; 註解掉
可是這樣的話actionsheep只有出現@"特殊紅色選項" 沒有出現cancel 的按鈕
我把 [actionSheet addButtonWithTitle:@"MSN"];加回去以後
就有cancel @"還是算了" 的按鈕了
請問可以幫我解答一下嗎.....感謝
你好 henry:
刪除關於你的問題,其實並不奇怪啦!
這是因為 UIActionSheet 在 iphone 和 ipad 中在實作上是由兩個完全不同的方法所產生的,「取消」的按鈕消失,其實並不是 bug。
在 iPAD 上呼叫 UIActionSheet 之後,整個畫面的 focus 都會在 UIActionSheet,但是當你點其畫面的其他地方(非 UIActionSheet View)本身時,UIActionSheet 就會消失,這類的操作如同你點擊「取消按鈕」一般,因此在 iPAD 上使用上述程式碼在建立 UIActionSheet 時,「取消按鈕」這部份會直接被略過,就如同 apple 的設計理念一樣,介面越簡潔越好,正如你不會為你的應用程式去設計一個「退出」的按鈕一樣。
另一方面,回到你的問題,在你增加 [actionSheet addButtonWithTitle:@"MSN"]; ,替之 UIActionSheet 增加一個新的按鈕之後,為什麼又會出現「取消按鈕」,我只能說,這只是一個美麗的誤會,因為當你的「取消按鈕」如果是在最末端(預設值),它理所當然會被忽略掉,不產生,但是你使用了 addButtonWithTitle: 方法去增加一個全新的按鈕在「取消按鈕」之後,那麼它就會把你最後一新增的按鈕當做是「取消按鈕」而不去繪製它。
由於我沒有辦法看到 UIActionSheet.m 這個實作檔,所以也只能初步推測,在 iPAD 的環境下,它總是會省略繪製最後一個按鈕,因為通常「取消按鈕」會是在整個 UIActionSheet 的最後面,我自己經過幾次的實驗也是得到類似的結果。
感謝回答!懂了:)
回覆刪除不客氣^^
刪除