2015-08-03 90 views
4

我有一个textview,当我按完成textview开始一个新行。textview键盘不会退出时,我按完成iOS

我已经实现了这些方法,并添加了所有与会代表

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

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

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

    [textField resignFirstResponder]; 
    return YES; 

} 

我设置了键盘回车键在属性检查器中完成的。 我想键盘上的完成键辞去第一响应者,它似乎不工作。

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

如何添加这两个语句,以便他们将工作没有错误?

+0

仅供参考 - 没有理由叫'resignFirstResponder'在'textViewDidEndEditing:'方法,因为该方法仅当文本视图已经辞职被称为急救人员。 – rmaddy

+0

@rmaddy好的,如果我删除那些resignfirstreponder方法,它会工作 – smithyy

+0

只是从'textViewDidEndEditing:'方法中去掉对'resignFirstResponder'的调用。顺便说一句 - 你为UITextView发布了一个委托方法,为UITextField发布了另一个委托方法。你真的在使用哪一个? 'textFieldShouldReturn:'方法不会与'UITextView'一起使用。它用于'UITextField'。巨大的差异。 – rmaddy

回答

2

在viewDidLoad中

添加委托 UITextViewDelegate

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

写入该行

textField.delegte = self; 

//下方添加委托方法[代码是在夫特。请找对象 - 方法和编写逻辑,因为我有]

- (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; 
} 
+0

谢谢我已经这样做 – smithyy

+0

没有为我工作 – smithyy

+0

你解决了吗? –

2

转到您的故事板,然后选择您的文本字段,并设置委托并也证实UITextFieldDelegate协议在您的.h文件中

希望它能帮助。

+0

如何设置故事板中的委托 – smithyy

+0

右键单击文本字段有选项委托单击圈中,然后转到文件所有者离开鼠标单击。 –

+0

你可以在你的.h文件中使用“@interface”。它应该看起来像这样:'@interface YourViewController:UIViewController '当你完成。 – Adrian