在UITextView中禁用返回键

19 iphone objective-c uitextview ios

我正在尝试禁用在键入时找到的返回键UITextView.我希望文本没有像在a中找到的页面缩进UITextField.这是我到目前为止的代码:

- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString*)aText
{
if ([aTextView.text isEqualToString:@"\r\n"]) {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dha*_*ngh 41

尝试使用这样..

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

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

    return YES;
}
Run Code Online (Sandbox Code Playgroud)

  • 这并没有考虑到所有可能的行结束字符,或者用户可能将一大块文本粘贴到文本字段中的事实(因此不等于“\n”但包含它) - Grzegorz 的解决方案很多更健壮。 (2认同)

Grz*_*ski 18

没有魔术硬编码字符串的另一种解决方案是:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:    (NSString *)text {
    if( [text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location == NSNotFound ) {
        return YES;
    }     

    return NO;
}
Run Code Online (Sandbox Code Playgroud)

  • +1,我喜欢不使用魔法弦的想法,这可能会改变(他们不会,但你会抓住我的漂移); 它也更容易阅读. (4认同)

小智 6

在Swift 3+中添加:

guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else {
    return false
}
Run Code Online (Sandbox Code Playgroud)

到顶部 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool