回答
你試過:
[viewReceivingKeys resignFirstResponder];
其中viewReceivingKeys
是接收文本輸入的UIView?
使用導航控制器並在完成後彈出視圖?
例如,我用這樣的代碼到約盒滑入:
[[self navigationController] presentModalViewController:modalViewController animated:YES];
,然後當在關於對話框單擊該按鈕時,我用它來擺脫它:
[self.navigationController dismissModalViewControllerAnimated:YES];
在我的情況下,關於框佔據整個屏幕,但我不認爲它必須爲此工作。
編輯:我想我可能誤解了你的問題。如果你自己僞造整個鍵盤視圖,那麼我的代碼就會出現這種情況。我認爲辭職的第一響應者是正確的方式來做到這一點,如果它是你的工具欄添加在頂部的普通鍵盤。
如果您在Interface Builder中構建自己的視圖,請將您的視圖控制器設置爲文本字段的委託並在您的視圖控制器中實現textFieldShouldReturn:從UITextFieldDelegate。
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
NSLog(@"%@ textFieldShouldReturn", [self class]);
[theTextField resignFirstResponder];
// do stuff with the text
NSLog(@"text = %@", [theTextField text]);
return YES;
}
UITextFieldDelegate textFieldShouldReturn: in the iphone cocoa docs
有幾個你需要記住的東西。開發人員忘記設置的號碼#1部分是textField的代表。
如果您使用Interface Builder,則必須記住您需要將textField的委託設置爲文件所有者。
如果您未使用Interface Builder,請確保將文本字段的委託設置爲self。我還包括returnType。例如,如果文本框被稱爲gameField:
gameField.delegate = self;
gameField.returnKeyType = UIReturnKeyDone;
您還必須實現UITextFieldDelegate您的視圖控制器。
@interface YourViewController : UIViewController <UITextFieldDelegate>
最後,你需要使用textFieldShouldReturn方法,並呼籲[文本字段resignFirstResponder]所以你只需要有這個設置一次
-(BOOL) textFieldShouldReturn:(UITextField*) textField {
[textField resignFirstResponder];
return YES;
}
您所有的文本框將使用同樣的方法。只要將代理設置爲textField,將爲接口實現UITextFieldDelegate,則添加textFieldShouldReturn方法並調用您設置的resignFirstResponder。
我想你的意思是gameField.returnKeyType = UIReturnKeyDone; – 2010-11-11 21:35:48
如果您正在討論的是解除鍵盤從UITextField
而不是UITextView
。你的問題不明確?如果您然後確保你的類被標記爲在接口文件UITextFieldDelegate
,
@interface MyController: UIViewController <UITextFieldDelegate> {
UITextField *activeTextField;
// ...remainder of code not show ...
}
,然後你應該,如果您使用的是實現兩個委託方法如下,
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
activeTextField = textField;!
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
activeTextField = nil;
[textField resignFirstResponder];
return YES;
}
然而UITextView
那麼事情就複雜一點了。 UITextViewDelegate
協議缺少相當於textFieldShouldReturn:
方法,大概是因爲我們不應該期望Return鍵是一個信號,表示用戶希望停止編輯多行文本輸入對話框中的文本(畢竟,用戶可能想要按Return鍵插入換行符)。
但是,有幾種方法可以使UITextView
無法成爲使用鍵盤的第一響應者。當UITextView
顯示彈出式鍵盤時,通常的方法是在導航欄中放置一個完成按鈕。點擊時,此按鈕會要求文本視圖作爲第一響應者辭職,然後關閉鍵盤。
但是,根據您計劃出的界面的方式,您可能希望UITextView
在用戶在UITextView
本身之外輕觸時退出。爲此,您可以繼承UIView
以接受觸摸,然後指示文本視圖在用戶在視圖外部自行敲擊時辭職。
創建一個新的類,
#import <UIKit/UIKit.h>
@interface CustomView : UIView {
IBOutlet UITextView *textView;
}
@end
然後,在執行,落實touchesEnded:withEvent:
方法和要求UITextView
辭去第一響應。
#import "CustomView.h"
@implementation CustomView
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void) awakeFromNib {
self.multipleTouchEnabled = YES;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"touches began count %d, %@", [touches count], touches);
[textView resignFirstResponder];
[self.nextResponder touchesEnded:touches withEvent:event];
}
@end
一旦您添加了類,您需要保存所有更改,然後進入Interface Builder並單擊您的視圖。打開Utility pabel中的Identity inspector並將筆尖文件中的視圖類型更改爲您的CustomView
而不是默認的UIView
類。然後在Connections Inspector中,將textView
插座拖動到UITextView
。這樣做後,一旦你重建你的應用程序,觸及活躍的用戶界面元素現在將關閉鍵盤。但是,請注意,如果您正在進行子類化的UIView
位於其他UI元素「後面」,則這些元素將在到達UIView圖層之前截取觸摸。所以雖然這個解決方案很優雅,但它只能在某些情況下使用。在很多情況下,您必須使用強力方法在導航欄中添加一個完成按鈕以關閉鍵盤。
- 1. ResignFirstResponder不關閉鍵盤(iPhone)
- 2. applicationWillResignActive關閉鍵盤iPhone
- 3. 關閉鍵盤
- 4. 關閉鍵盤
- 5. MFMessageComposeViewController關閉鍵盤
- 6. 關閉iPad鍵盤
- 7. 關閉UITextField鍵盤?
- 8. Android關閉鍵盤
- 9. UIKeyboardTypeNumberPad關閉鍵盤
- 10. MonoTouch.Dialog:關閉鍵盤
- 11. 關閉鍵盤數字鍵盤
- 12. iPhone - 用OK按鈕關閉鍵盤,用UITextView接受返回鍵
- 13. 關閉帶回車鍵的iPhone Mail View Controller鍵盤
- 14. 使用鍵盤關閉JFrame
- 15. 如何關閉鍵盤?
- 16. 如何關閉iOS鍵盤?
- 17. 關閉IPAD上的鍵盤
- 18. Android鍵盤不關閉
- 19. 關閉UIViewController中的鍵盤
- 20. 關閉鍵盤 - 的OBJç
- 21. 關閉鍵盤不工作
- 22. trigger.io - 關閉軟鍵盤?
- 23. MonoTouch關閉鍵盤(各種)
- 24. 關閉UITextField中的鍵盤
- 25. 跳板關閉鍵盤
- 26. Objective-c EKEventEditViewController關閉鍵盤
- 27. 關閉textview的鍵盤
- 28. Android阻止鍵盤關閉
- 29. windows 7 phone - 關閉鍵盤
- 30. Framework7 - SearchBar關閉鍵盤
這是我想要的興奮。謝謝。 – Lounges 2008-12-23 21:25:56