0

I have four text fields in a ViewController, and want to disable the keyboard for two of them (textField1 and textField2).

I have tried implementing the following after assigning the text fields as delegates in viewDidLoad

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField) {
    if ([self.textField1 isTouchInside] || [self.textField2 isTouchInside] {
        return NO;
    } else {  
        return YES;
    }
}

However, this disables the keyboard for the ViewController completely, so it will not appear when trying to edit textField3 and textField4. How can I get around this problem?

For example, is there a way to refresh the run textFieldShouldBeginEditing method again after editing ends on a textField?

Also, I know I can create a label to accomplish something similar, but I would prefer to use a text field in my case.

EDIT: So I left out a big detail. I am firing an IBaction when pressing textField1 and 2. However, Lootsch's answer gave me an idea.

In the textField1/2Pressed IB action, I ran the textfield.enable:NO methods, then I re-enabled them when I fired a second action which submitted data to the textfields, such as below

- (IBAction)textField1Pressed:(id)sender {
    self.textField.Enabled = NO;   
}

- (IBAction)submitToTextField1:(id)sender {
    self.textField.text = @"blah blah";
    self.textField.Enabled = YES;    
}

Albeit, this requires having two entering an exiting actions, but it worked for me. Also, I did not have to manipulate the textFieldShouldBeginEditing method with this solution.

4 Answers 4

1

You should disable these two textFields (in code or via IB) or you can disable the user interactions (different appearance, same function):

textField3.enabled = NO;
textField4.enabled = NO;

Or:

textField3.userInteractionEnabled = NO;
textField3.userInteractionEnabled = NO;

The second approach won't change the appearance of the UITextFields, while the first will indicate, that these TextFields are disabled.

Sign up to request clarification or add additional context in comments.

Comments

0

something like should do

if (textField==textField1 || textField==textField2) [textField resignFirstResponder]; 

Comments

0

Please try this

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

if (textField==self.textField1 || textField==self.textField2)
{
    return NO;

}
    else
{
    return YES;
}

}

Comments

0
- (BOOL)textFieldShouldBeginEditing:(UITextField *)mytextField
{

    if((mytextField.tag == 104) || (mytextField.tag == 105) || (mytextField.tag == 106))
    {        
        if(mytextField.tag == 104)
        {
            point = 50;
//            if(textField1.tag == 4)
            {
                [self showDatePickerWithTitle:@"Select DOB"];
                return NO;
            }
           //

        }
     }
else
{
retutn YES;
}

//you can also try this piece of code.With tag property of textfield.And make sure your tag is not zero,because the default tag is 0 for the main view.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.