如何在键盘上添加完成按钮?

时间:2012-04-09 17:31:21

标签: ios iphone objective-c xcode programmatically-created

更新:

我也尝试过实现UITextViewDelegate委托,然后在我的控制器中执行:

- (BOOL)textViewShouldEndEditing:(UITextView *)textView
{
    [textView resignFirstResponder];
    return YES;
}

我还将文本视图的委托设置为self(控制器视图实例)。

单击“完成”按钮仍然只会插入一个新行:(


更新:

到目前为止我做了什么。我已经通过我的视图控制器实现了一个UITextFieldDelegate。

我已经通过插座将文本视图连接到视图控制器。

然后我做了:


self.myTextView.delegate = self;

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

但是当我点击完成按钮时,它只会添加一个新行。

所以我的场景中有一个UITextView元素,当用户点击它时,会出现键盘并可以编辑它。

然而,我不能解雇键盘。

如何将“完成”按钮添加到键盘以便可以将其解除?

9 个答案:

答案 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上重新启动第一个响应者来关闭键盘。