fuddson
fuddson

Reputation: 23

How do you disable keyboard for specific UITextField in same ViewController?

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.

Upvotes: 0

Views: 465

Answers (4)

Abhishek
Abhishek

Reputation: 368

- (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.

Upvotes: 0

Sai Pasumarthy
Sai Pasumarthy

Reputation: 87

Please try this

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

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

}
    else
{
    return YES;
}

}

Upvotes: 0

lootsch
lootsch

Reputation: 1865

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.

Upvotes: 1

Marcal
Marcal

Reputation: 1371

something like should do

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

Upvotes: 0

Related Questions