簡體   English   中英

如何將完成按鈕添加到鍵盤?

[英]How to add Done button to the keyboard?

更新:

我還嘗試實現 UITextViewDelegate 委托,然后在我的 controller 中執行:

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

我還將文本視圖的委托設置為自身(控制器視圖實例)。

單擊“完成”按鈕仍會插入一個新行:(


更新:

到目前為止我做了什么。 我已經通過我的視圖 controller 實現了一個 UITextFieldDelegate。

我已通過插座將文本視圖連接到視圖 controller。

然后我做了:


self.myTextView.delegate = self;

和:

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

但是當我點擊完成按鈕時,它只是添加了一個新行。

所以我的場景中有一個 UITextView 元素,當用戶點擊它時,鍵盤會出現並且可以對其進行編輯。

但是,我不能關閉鍵盤。

如何將“完成”按鈕添加到鍵盤以便將其關閉?

那很簡單:)

[textField setReturnKeyType:UIReturnKeyDone];

要關閉鍵盤,請在 class 中執行<UITextFieldDelegate>協議,設置

textfield.delegate = self;

並使用

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [textField resignFirstResponder];
}

要么

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

Go 到你的 storyboard,select 你的文本字段,在屬性檢查器下有一個選項,上面寫着“返回鍵”...select“完成”。

然后 go 進入你的 ViewController 並添加:

- (IBAction)dismissKeyboard:(id)sender;
{
    [textField becomeFirstResponder];
    [textField resignFirstResponder];
}

然后 go 回到您的文本字段,單擊 outlets 並鏈接“Did end on exit”以取消鍵盤操作。

添加 UIToolBar 作為自定義視圖,其中將包含完成按鈕作為 UIBarButtonItem。

這是將“完成”按鈕添加到任何類型的鍵盤的更安全、更簡潔的方法。 創建 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

 - (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

Function

  @IBAction func doneBtnFromKeyboardClicked (sender: Any) {
     print("Done Button Clicked.")
    //Hide Keyboard by endEditing or Anything you want.
    self.view.endEditing(true)
  }

Swift版本:

在你的視圖控制器中:

textField.returnKeyType = UIReturnKeyType.Done
textField.delegate = self

在你的 ViewController 之后

extension MyViewController: UITextFieldDelegate {        
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

在文本字段的檢查器中的text field選項下設置'Return Key'選項。 然后右鍵單擊文本字段並按住CTRL select 'Did End On Exit'並將其拖到view controllers文件中。 這將創建一個IBAction方法。 為該方法命名,然后輸入以下值:

[textField becomeFirstResponder];
[textField resignFirstResponder];

您的方法應如下所示:

- (IBAction)methodName:(id)sender;
{
    [sender becomeFirstResponder];
    [sender resignFirstResponder];
}

好的,所以我也一直在為這個問題而苦苦掙扎。 目前我正在訪問 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 解決方案,但我想我會把它放在那里以防萬一有人需要它!

這是在鍵盤上添加完成按鈕的最佳方式

textField.returnKeyType = UIReturnKeyDone;

以下是我的做法,在Swift 3 單擊doneBtn時,讓它發送.editingDidEndOnExit事件。 我使用此事件來處理多個文本字段之間的焦點問題。

// My customized UITextField
class MyTextField: UITextField {

    override func awakeFromNib() {
        super.awakeFromNib()

        // Add toolBar when keyboardType in this set. 
        let set : [UIKeyboardType] = [.numberPad, .phonePad]
        if (set.contains(self.keyboardType) ) {
            self.addDoneToolbar()
        }
    }

    // Add a toolbar with a `Done` button
    func addDoneToolbar() {

        let toolbar = UIToolbar()
        let space = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
        let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(onToolBarDone))

        toolbar.items = [space, doneBtn]
        toolbar.sizeToFit()

        self.inputAccessoryView = toolbar
    }

    @objc func onToolBarDone() {
        // I use `editingDidEndOnExit` to simulate the `Done` behavior 
        // on the original keyboard.
        self.sendActions(for: .editingDidEndOnExit)
    }
}

在 textView 的屬性上的 Interface Builder 中,您可以將返回按鈕類型設置為完成。

然后你需要檢查何時按下返回按鈕使用

  - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

檢查文本是否 == "/n",然后通過辭去 textView 上的第一響應者來關閉鍵盤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM