![](/img/trans.png)
[英]Flutter iOS - How to hide the DONE button at the top of the ios keyboard?
[英]iOS 7: How to hide the DONE button on the keyboard
我正在嘗試為用戶提供一種消除鍵盤的方法,無論是在鍵盤外部單擊還是在鍵盤本身上具有“完成”按鈕。
我已經創建了“完成”按鈕,並且在iOS 6上運行良好:
UIToolbar *keyboardToolbar;
keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 44, 320, 44)];
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"dismiss_keyboard", nil) style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyboard)];
NSArray *items = [NSArray arrayWithObjects:flexItem,doneItem, nil];
[keyboardToolbar setItems:items animated:YES];
for (UIView *subview in [searchBar subviews])
{
if( [subview isKindOfClass:[UITextField class]] )
{
((UITextField*)subview).delegate=self;
((UITextField*)subview).inputAccessoryView = keyboardToolbar;
break;
}
}
但是在iOS 7上找不到此按鈕。
我還嘗試使用一種方法,用戶可以單擊除鍵盤之外的任何位置並使它消失:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
//Code to dismiss keyboard.
}
但是我的視圖包含一個UISearchBar
和一個UITableView
但是當我觸摸它們時,僅當我觸摸父UIView時, touchesBegan
事件不會觸發,該事件不可見,因為它已被UISearchBar
和UITableView
覆蓋。 我必須觸摸兩者之間的微小空間才能觸發事件。
如何使我的touchesBegan
方法適用於屏幕上的任何對象? 為什么我的“完成”按鈕沒有顯示在iOS 7中?
為什么我的“完成”按鈕未在iOS 7中顯示?
您的“完成”按鈕未顯示,因為您不應修改的UISearchBar的內部結構已更改。 (這就是您不應該修改它的原因。)
如果要繼續這種不推薦的行為並使它正常工作,而不是檢查它是否是UITextField,可以嘗試檢查它是否符合UITextInputTraits,並遍歷子視圖的子視圖:
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
// iOS 6
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
// iOS 7
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
(此代碼來自此SO答案 。)
但是, 不建議使用這種方法,因為它可能會在iOS 7.1中再次中斷。 作為遞歸方法,它也可能更具彈性。
如何使我的
touchesBegan
方法適用於屏幕上的任何對象?
觸摸事件由頂視圖處理,因此,如果其他視圖不希望它們,則UIView只會獲取它們。 最簡單的方法是制作一個不可見的UIButton,將其覆蓋整個屏幕,如果輕按了,則關閉鍵盤並卸下按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.