Reputation:
I am trying to disable the return key found when typing in a UITextView
. I want the text to have no page indents like found in a UITextField
. This is the code I have so far:
- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString*)aText
{
if ([aTextView.text isEqualToString:@"\r\n"]) {
return NO;
}
Any ideas?
Upvotes: 25
Views: 16386
Reputation: 131
In Swift 3+ add:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
guard text.rangeOfCharacter(from: CharacterSet.newlines) == nil else {
// textView.resignFirstResponder() // uncomment this to close the keyboard when return key is pressed
return false
}
return true
}
Don't forget to add textView
's delegate in order for this to be called
Upvotes: 13
Reputation: 3523
I know this is late reply but this code is perfect working for me. This will disable return key initially until type any character.
textfield.enablesReturnKeyAutomatically = YES;
By Interface Builder set this property,
Upvotes: -1
Reputation: 19792
Another solution without magic hardcoded strings will be:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText: (NSString *)text {
if( [text rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]].location == NSNotFound ) {
return YES;
}
return NO;
}
Upvotes: 20
Reputation: 17535
Try to use like this..
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
if([text isEqualToString:@"\n"])
{
[textView resignFirstResponder];
return NO;
}
return YES;
}
Upvotes: 42