2011-05-02 75 views
2

我使用選取器子視圖設置自定義視圖的動畫,如激活UITextField時鍵盤顯示的方式。動畫選擇器查看標籤欄像鍵盤

目前我通過將我的自定義視圖作爲子視圖添加到應用程序的UIWindow來實現。如果我將自定義視圖作爲子視圖添加到當前選項卡欄視圖控制器的視圖中,則選項卡欄將覆蓋選取器。有沒有一種方法可以將自定義視圖設置爲當前視圖控制器的子視圖,而不必使用標籤欄覆蓋自定義視圖?鍵盤出現在什麼位置?

回答

7

只是一點點免責聲明:這是我在stackoverflow上的第一篇文章,所以如果格式化並不都很好,我很抱歉。另外,我對iOS編程以及Objective C語言相當陌生,所以我絕對不會說這是'應該'完成的方式。然而,最近我遇到了一種相似的情況,我用我認爲很優雅的方式解決了這個問題:

對我來說,使用UIPickerView似乎只是將文本輸入文本字段的首選方式,而不是使用常規鍵盤。從用戶體驗的角度來看,對我來說,這意味着UIPickerView應該(dis)以類似於鍵盤的方式出現。

由於iOS的3.2,的UITextField支持inputView屬性分配一個自定義視圖中使用的鍵盤,其提供了一種方法來顯示一個UIPickerView:

UIPickerView *myPickerView = [[UIPickerView alloc] init]; 
//myPickerView configuration here... 
myTextField.inputView = myPickerView; 

這樣。由於你的UIPickerView沒有返回按鈕,所以這不會給你一個直接解除視圖的直接方式,這就是爲什麼我建議使用inputAccessoryView屬性來顯示帶有完成按鈕的工具欄(該欄只是爲了美觀,你也可以只需使用一個UIButton對象):

UIToolbar *myToolbar = [[UIToolBar alloc] initWithFrame: 
CGRectMake(0,0, 320, 44); //better code with variables to support view rotation 
UIBarButtonItem *doneButton = 
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
target:self action:@selector(inputAccessoryViewDidFinish)]; 
//using default text field delegate method here, here you could call 
//myTextField.resignFirstResponder to dismiss the views 
[toolbar setItems:[NSArray arrayWithObject: doneButton] animated:NO]; 
myTextField.inputAccessoryView = myToolbar; 
//you can -release your doneButton and myToolbar if you like 

當我重讀你的問題,我注意到UIPickerView只是子視圖的一部分。無論如何,這種方法適用於任何視圖,所以在你的情況下,你可以將你的子視圖設置爲UITextField的inputView。

0

您可以嘗試將您的子視圖添加到UITabBarController的視圖本身,而不是活動控制器的視圖(tabBarController.view而不是tabBarController.selectedViewController.view),並對您添加的子視圖執行bringSubviewToFront。我沒有嘗試過,所以我不確定它是否有效。

它確實感覺有點亂碼,因爲它取決於UITabBarController協作 - 這使我感到不舒服,因爲這種行爲沒有很好的定義。我沒有發現任何使用UIWindow的內在錯誤。