2012-03-12 86 views
10

我需要就如何落實下拉列表這樣的功能在iOS的一些投入。iOS如何實現一個下拉列表以及如何處理關閉它?

我心中有一個解決方案,如使用UITableView用於顯示文本項的列表。 (在我的情況下,這個列表可能是靜態的,也可能是動態的,所以UITableView似乎對我來說是個不錯的選擇)。但有一件事,我無法弄清楚如何解僱下拉...

假設這個下拉列表在視圖的某個地方打開(假設這個視圖佔據了整個屏幕)。下拉菜單一旦打開,當我在視圖中的其他位置點擊時應該被解散(關閉),就像典型的下拉菜單在桌面環境中的工作方式一樣。我怎麼做?

一種方法是聽touchesBegan事件的看法,看看是否下拉是開放的 - 這是好的,但問題是,如果我有事情喜歡按鈕,當用戶點擊其中一個,那麼我沒有收到在視圖上輸入touchesBegan

我如何去在一個通用的方式解決這個?

+0

看看它,我會去了解一下UIPopOverViewController,它需要什麼,我不知道,但它可能只支持iPad。 – 2012-03-12 18:03:25

+1

UIPickerViewController是在這種情況下應該使用的。下拉菜單是iPhone上沒有位置的東西。這是一臺iPhone而不是臺式電腦。 – Fogmeister 2013-07-15 08:09:13

+0

使用這種 https://github.com/satishazad/SAMenuDropDown – 2013-10-30 17:32:45

回答

19

下拉列表中通常使用一個UIPickerView的iOS實現。拾取器視圖可以設置爲文本字段的輸入視圖,該輸入視圖可以容納下拉菜單,然後以與鍵盤相同的方式在屏幕上和屏幕外進行動畫。

您通常還需要一個UIToolbar,其中包含一個「完成」按鈕作爲輸入附件視圖,這將出現在選取器上方,並允許您在選擇後自動解散。

您發送resignFirstResponder文本字段無論是從選擇器視圖的委託方法或您完成按鈕的操作方法去除選擇器。

您創建工具欄作爲附件觀點如下:

accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
accessoryView.barStyle = UIBarStyleBlackTranslucent; 

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTapped:)]; 

accessoryView.items = [NSArray arrayWithObjects:space,done, nil]; 

textField.inputAccessoryView = accessoryView; 

這會給你上連接到名爲doneTapped的操作方法正確的一個「完成」按鈕:

+0

嗨jrturton,感謝這個答案。實現下拉列表功能非常有用。我創建了選取器視圖並將其分配爲textfiedl的輸入視圖。它工作正常,但我無法解僱pickeview。你提到我需要使用UIToolbar來保存一個完成按鈕,但我沒有得到它如何做到這一點。請給我簡要的例子。 – applefreak 2012-03-26 17:16:54

+0

添加簡短示例 – jrturton 2012-03-26 21:28:02

+0

非常感謝! – applefreak 2012-03-27 10:45:14

3

嘗試這一點。它可能有幫助。

1) Add the UITableView on a transparent UIView. 
2) The UIView should have the same size as the display screen. 
3) The UITableView shall take the same small size you have. 
4) Implement the touches method as you mentioned for the holding UIView. 
2

首先,如果你在iPad上,一個UIPopoverViewController就是爲這個設計的。如果您需要更多的自定義功能,我總是會在隱藏下拉菜單中隱藏全屏大小的按鈕。它覆蓋整個屏幕,當被觸摸或下拉菜單被解除時,隱藏自己。超級簡單。