Prevent editing of text in UITextField and hide cursor/caret/magnifying glass while using an inputView

Josh Bernfeld picture Josh Bernfeld · Aug 9, 2013 · Viewed 9.3k times · Source

How do I prevent the editing of text in a UITextField along with hiding the cursor/caret/magnifying glass, but still present the keyboard, as I am using an inputView with a UIPickerView/UIDatePickerView?

Setting userInteractionEnabled to NO does not work, because it no longer receives any touches and will not present the keyboard.

Answer

Josh Bernfeld picture Josh Bernfeld · Aug 9, 2013

Subclass UITextField

//Disables caret
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return CGRectZero;
}

//Disables magnifying glass
-(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]])
    {
        gestureRecognizer.enabled = NO;
    }
    [super addGestureRecognizer:gestureRecognizer];
}

In your UITextFieldDelegate

//Prevent text from being copied and pasted or edited with bluetooth keyboard.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return NO;
}

Now just set your text programmatically from the result of your UIPickerView/UIDatePicker.