更新:
我也尝试过实现UITextViewDelegate委托,然后在我的控制器中执行:
- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
[textView resignFirstResponder];
return YES;
}
我还将文本视图的委托设置为self(控制器视图实例)。
单击“完成”按钮仍然只会插入一个新行:(
更新:
到目前为止我做了什么。我已经通过我的视图控制器实现了一个UITextFieldDelegate。
我已经通过插座将文本视图连接到视图控制器。
然后我做了:
self.myTextView.delegate = self;
和
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
但是当我点击完成按钮时,它只会添加一个新行。
所以我的场景中有一个UITextView元素,当用户点击它时,会出现键盘并可以编辑它。
然而,我不能解雇键盘。
如何将“完成”按钮添加到键盘以便可以将其解除?
答案 0 :(得分:121)
这非常简单:)
[textField setReturnKeyType:UIReturnKeyDone];
用于解除键盘实现班级中的<UITextFieldDelegate>
协议,设置
textfield.delegate = self;
并使用
- (void)textFieldDidEndEditing:(UITextField *)textField {
[textField resignFirstResponder];
}
或
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
答案 1 :(得分:17)
进入故事板,选择文本字段,在属性检查器下面有一个选项,显示“返回键”...选择“完成”。
然后进入ViewController并添加:
- (IBAction)dismissKeyboard:(id)sender;
{
[textField becomeFirstResponder];
[textField resignFirstResponder];
}
然后返回您的文本字段,点击出口并链接“退出时结束”以解除关键操作。
答案 2 :(得分:14)
将UIToolBar添加为自定义视图,其中包含Done按钮作为UIBarButtonItem。
这是将Done按钮添加到任何类型键盘的更安全,更清晰的方法。创建UIToolBar为其添加Done Button并设置任何UITextField或UITextView的inputAccessoryView。
UIToolbar *ViewForDoneButtonOnKeyboard = [[UIToolbar alloc] init];
[ViewForDoneButtonOnKeyboard sizeToFit];
UIBarButtonItem *btnDoneOnKeyboard = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleBordered target:self
action:@selector(doneBtnFromKeyboardClicked:)];
[ViewForDoneButtonOnKeyboard setItems:[NSArray arrayWithObjects:btnDoneOnKeyboard, nil]];
myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard;
IBAction For Done Button
- (IBAction)doneBtnFromKeyboardClicked:(id)sender
{
NSLog(@"Done Button Clicked.");
//Hide Keyboard by endEditing or Anything you want.
[self.view endEditing:YES];
}
SWIFT 3
var ViewForDoneButtonOnKeyboard = UIToolbar()
ViewForDoneButtonOnKeyboard.sizeToFit()
var btnDoneOnKeyboard = UIBarButtonItem(title: "Done", style: .bordered, target: self, action: #selector(self.doneBtnFromKeyboardClicked))
ViewForDoneButtonOnKeyboard.items = [btnDoneOnKeyboard]
myTextField.inputAccessoryView = ViewForDoneButtonOnKeyboard
功能
@IBAction func doneBtnFromKeyboardClicked (sender: Any) {
print("Done Button Clicked.")
//Hide Keyboard by endEditing or Anything you want.
self.view.endEditing(true)
}
答案 3 :(得分:10)
Swift版本:
在ViewController中:
textField.returnKeyType = UIReturnKeyType.Done
textField.delegate = self
在ViewController之后
extension MyViewController: UITextFieldDelegate {
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
答案 4 :(得分:1)
在检查器的'Return Key'
选项下为您的文本字段设置text field
选项。
然后右键单击文本字段,在按住CTRL
的同时选择'Did End On Exit'
并将其拖到view controllers
文件中。这将创建一个IBAction
方法。为方法命名,然后输入以下值:
[textField becomeFirstResponder];
[textField resignFirstResponder];
您的方法应如下所示:
- (IBAction)methodName:(id)sender;
{
[sender becomeFirstResponder];
[sender resignFirstResponder];
}
答案 5 :(得分:1)
好的,所以我也一直在努力解决这个问题。目前我正在访问UITableViewCell中的UITextView(通过标签)。因为我正在使用原型细胞,所以我不能像所有人所说的那样使用IBActions和IBOutlets。相反,我正在使用;
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
每次用户点击按钮时,这将为我提供文本。我的解决方案是获得新行的ascii字符; “/ n” 个。如果这是输入的文本,我将辞职第一响应者。例如;
// If the text length is 0 then the user is deleting something, so only check the ascii character if there is text to check if (text.length != 0) { // Get the Ascii character int asciiCode = [text characterAtIndex:0]; // If the ascii code is /n or new line, then resign first responder if (asciiCode == 10) { [alertTextView resignFirstResponder]; [DeviceTextView resignFirstResponder]; } }
不确定是否有其他人需要这个hacky解决方案,但我想我会把它放在那里,万一有人需要它!
答案 6 :(得分:0)
这是在键盘上添加完成按钮的最佳方式
textField.returnKeyType = UIReturnKeyDone;
答案 7 :(得分:0)
以下是std::tuple<...>
中的方法。点击Swift 3
后,让它发送doneBtn
个事件。我使用此事件来处理多个textField之间的焦点问题。
.editingDidEndOnExit
答案 8 :(得分:-2)
在Interface Builder中,对于textView的属性,您可以将返回按钮类型设置为“完成”。
然后你需要检查何时使用
按下Return按钮 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
检查文本是否==“/ n”然后通过在textView上重新启动第一个响应者来关闭键盘。