当我按完iOS时,textview键盘不会辞职

smi*_*hyy 5 objective-c uitextview uikeyboard ios resignfirstresponder

我有一个textview,当我按完后textview开始一个新的行.

我已经实现了这些方法并添加了所有委托

@property (nonatomic, strong) IBOutlet UITextView *textField;

-(void)textViewDidEndEditing:(UITextView *)textView //was UITextField
{
    [self.textField resignFirstResponder];
}

- (BOOL)textFieldShouldReturn:(UITextView *)textField{

    [textField resignFirstResponder];
    return YES;

}
Run Code Online (Sandbox Code Playgroud)

我将键盘返回键设置为在属性检查器中完成.我希望键盘上的完成键可以让第一响应者辞职,但它似乎不起作用.

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

    if([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;

    // error thrown here saying code will never execute
    if(range.length + range.location > textField.text.length)
{
    return NO;
}

NSUInteger newLength = [textField.text length] + [string length] - range.length;
return newLength <= 300;
}
Run Code Online (Sandbox Code Playgroud)

我如何添加这两个语句,以便它们可以正常工作而不会出错?

Che*_*ati 3

添加委托 UITextViewDelegate

@property (nonatomic, strong) IBOutlet UITextView *textField;
Run Code Online (Sandbox Code Playgroud)

在viewDidLoad中写入这一行

textField.delegte = self;
Run Code Online (Sandbox Code Playgroud)

// 添加下面的委托方法 [代码在 Swift 中。请找到 obj-c 方法并按照我的方式编写逻辑]

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

    if([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    if (textField.text.length >= 300) {
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)