我试图使我的可编辑 UITextView 辞职键盘(resignFirstResponder)当用户点击“完成”时。用一个 UITextField, ,我已经能够使用以下代码执行此操作:

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

...然后将其附加到相关 UITextField 在接口构建器中,该动作“确实以退出为止”。

但是,有一个 UITextView, ,我似乎无法访问“ DID DID在退出”动作中。关于如何实现这一目标有什么建议?

有帮助吗?

解决方案

新答案

从您的角度来看,您将拥有一个连接到下面的IBACTION的Uibarbutton(“完成”):

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

在您的.h文件中定义的文本视图是您的TextView的位置,并在故事板或.xib文件中连接。像这样:

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

旧答案

检查以下内容:

  1. 是否在.h中指定了UITEXTVIEWDELEGATE
  2. 实现uitextview的代表方法:textviewshoulddendeding,返回是
  3. 确保您的.m(控制器)是IB中UITEXTVIEW的代表
  4. 辞职现在应该起作用。

其他提示

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

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

将其粘贴到您分配的课堂中,为UITEXTVIEW代表,它将起作用。

您可以实现 UITextViewDelegate 并在Swift 4中等待“ 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
    }
}

为了完成完成按钮,请拆除键盘和 resignFirstResponder 您必须实现委托方法。

  1. 在您的.h实施UitextfieldDelegate中

    @interface YourViewController : UIViewController <UITextFieldDelegate>
    
  2. 然后在您的.m中实现textfieldshoulderturn

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top