2011-05-30 118 views
11

在一个UITextView隐藏键盘,有方法:添加一个按钮隐藏键盘

... 
    textfield.returnKeyType = UIReturnKeyDone; 
    textfield.delegate = self; 
.... 

-(BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 

} 

,但如果我要离开按钮“做”到“回归”,并添加一个按钮隐藏键盘,我该怎么办?

回答

34

您可以指定一个工具栏,其中包含一个用于取消键盘的按钮,即文本框的inputAccessoryView。一个简单的例子是,

UIBarButtonItem *barButton = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:textField action:@selector(resignFirstResponder)] autorelease]; 
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease]; 
toolbar.items = [NSArray arrayWithObject:barButton]; 

textField.inputAccessoryView = toolbar; 
+0

感谢,但如果我想也从一个密钥的方法调用? – Vins 2011-05-30 19:40:24

+0

我没有得到你。你想打甚么? – 2011-05-30 19:49:44

+0

我有一个将文本保存到数据库的方法[self saveString]; – Vins 2011-05-30 19:51:47

3

这可以做的更容易!

我在IB做了一个自定义视图,在我viewController.h我只是做了一个IBOutlet UIView *accessoryView;,连接他们和- (IBAction)dismissKeyboard;

我把视图中的工具栏与完成按钮,做出了IBAction为连接一个写道: [textView resignFirstResponder]

- (void)viewDidLoad 
{ 
    textView.inputAccessoryView = accessoryView; 
    [super viewDidLoad]; 
} 

但实际上,看起来有点怪怪的和非苹果风格的...有一个想法?

4

雨燕2.0的版本:

//Declared at top of view controller 
var accessoryDoneButton: UIBarButtonItem! 
let accessoryToolBar = UIToolbar(frame: CGRectMake(0,0,UIScreen.mainScreen().bounds.width, 44)) 
//Could also be an IBOutlet, I just happened to have it like this 
let codeInput = UITextField() 

//Configured in viewDidLoad() 
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: #selector(self.donePressed(_:))) 
self.accessoryToolBar.items = [self.accessoryDoneButton] 
self.codeInput.inputAccessoryView = self.accessoryToolBar 

斯威夫特4:

//Declared at top of view controller 
var accessoryDoneButton: UIBarButtonItem! 
let accessoryToolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44)) 
//Could also be an IBOutlet, I just happened to have it like this 
let codeInput = UITextField() 

//Configured in viewDidLoad() 
self.accessoryDoneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: self, action: #selector(self.donePressed)) 
self.accessoryToolBar.items = [self.accessoryDoneButton] 
self.codeInput.inputAccessoryView = self.accessoryToolBar 

func donePressed() { 
    //Causes the view (or one of its embedded text fields) to resign the first responder status. 
    view.endEditing(true) 
} 

UIToolBar Documentation

'inputAccessoryView' documentation

+0

哪里'donePressed'方法? – rmaddy 2017-03-26 17:32:38

+0

'donePressed'只是一个功能你' UIViewController'。我通常会辞去第一个响应者的活动键盘,然后如果我愿意的话,将视图控制器从导航栈中弹出。 – 2017-04-17 18:06:11