如何使UITextView“完成”按钮resignFirstResponder?

时间:2010-10-20 10:29:23

标签: iphone interface-builder ios uitextview iboutlet

当用户点按“完成”时,我正在尝试让我的可编辑UITextView辞职键盘(resignFirstResponder)。使用UITextField,我可以使用以下代码执行此操作:

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

...然后将其附加到Interface Builder中的相关UITextField,以执行“退出时已结束”操作。

然而,使用UITextView,我似乎无法访问“退出时结束”操作。关于如何实现这一目标的任何建议?

4 个答案:

答案 0 :(得分:88)

接受的答案对我不起作用。相反,应该像这样调用以下委托方法:

- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    if([text isEqualToString:@"\n"]){
        [textView resignFirstResponder];
        return NO;
    }else{
        return YES;
    }
}

将其粘贴到您指定为UITextView委托的类中,它将起作用。

答案 1 :(得分:13)

新答案

在你的视图中,你有一个连接到下面的IBAction的UIBarButton(“完成”):

- (IBAction)doneEditing:(id)sender {
    [textView resignFirstResponder];
}

其中textView是您的.h文件中定义的textView插座,并连接在Storyboard或.xib文件中。像这样:

@property (retain, nonatomic) IBOutlet UITextView *textView;

旧答案

检查以下内容:

  1. 是否指定了UITextViewDelegate     在.h
  2. 实施委托方法     对于uitextview:     textViewShouldEndEditing,返回YES
  3. 确保您的.m(控制器)是     IB的uitextview代表
  4. resignFirstResponder现在应该     工作

答案 2 :(得分:0)

你可以在Swift 4中实现UITextViewDelegate并等待“\ n”:

    myTextView.delegate = self

// ...

extension MyViewController : UITextViewDelegate {

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if text == "\n" {
            textView.resignFirstResponder()
            return false
        }

        return true
    }
}

答案 3 :(得分:-5)

要让完成按钮关闭键盘,resignFirstResponder必须实现委托方法。

  1. 在你的.h中实现UITextFieldDelegate

    @interface YourViewController : UIViewController <UITextFieldDelegate>
    
  2. 然后在.m

    中实现textFieldShouldReturn
    -(BOOL) textFieldShouldReturn:(UITextField *)textField
    {
    [textField resignFirstResponder];
    return YES;
    }
    
  3. 不要忘记将UITextField的委托链接到文件的所有者(非常重要)