I\'m creating an iOS 8 app with Xcode 6.0.1 for my iPhone 5 (which has iOS 8.0.2 on it). I want to make it so that when a user clicks on my UITextView
, all the text
This solution works too and does not require subclassing UITextView
, just put this function on your delegate:
OBJECTIVE C -
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
dispatch_async(dispatch_get_main_queue(), ^{
[textView selectAll:nil];
});
return YES;
}
SWIFT 3 -
func textViewDidBeginEditing(_ textView: UITextView) {
DispatchQueue.main.async {
textView.selectAll(nil)
}
}
@brentvatne 's solution worked for me. Posting the Swift syntax so people can copy and paste in the future.
func textViewShouldBeginEditing(textView: UITextView) -> Bool {
dispatch_async(dispatch_get_main_queue()) {
textView.selectAll(nil)
}
return true
}
The best solution I've found for this issue so far is to create a custom UITextView
(i.e. create a new class that extends UITextView
) and then implement the selectAll
method like this:
- (void)selectAll:(id)sender {
[super selectAll:sender];
UITextRange *selectionRange = [self textRangeFromPosition:self.beginningOfDocument toPosition:self.endOfDocument];
[self performSelector:@selector(setSelectedTextRange:) withObject:selectionRange afterDelay:0.0];
}
Then when you use a text view, set its type to your custom text view type (in your code and in the storyboard). Now you can successfully call the selectAll
method whenever you need to. I suppose this should work with UITextField
too, but I haven't tried it yet.