如何在同一个ViewController中禁用特定UITextField的键盘?

时间:2014-04-01 19:45:21

标签: ios iphone objective-c uiviewcontroller uitextfield

我在ViewController中有四个文本字段,并希望禁用其中两个键盘(textField1和textField2)。

在viewDidLoad

中将文本字段指定为委托后,我尝试实现以下功能
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField) {
    if ([self.textField1 isTouchInside] || [self.textField2 isTouchInside] {
        return NO;
    } else {  
        return YES;
    }
}

但是,这会完全禁用ViewController的键盘,因此在尝试编辑textField3和textField4时不会显示。我怎样才能解决这个问题呢?

例如,有没有办法在textField上编辑结束后再次刷新运行textFieldShouldBeginEditing方法?

另外,我知道我可以创建一个标签来完成类似的事情,但我更喜欢在我的案例中使用文本字段。

编辑:所以我遗漏了一个很大的细节。我在按下textField1和2时正在触发IBaction。然而,Lootsch的回答给了我一个想法。

在textField1 / 2Pressed IB动作中,我运行了textfield.enable:NO方法,然后当我触发向文本域提交数据的第二个动作时重新启用它们,如下面的

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

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

虽然这需要两个人进入退出行动,但它对我有用。此外,我没有必要使用此解决方案来操作textFieldShouldBeginEditing方法。

4 个答案:

答案 0 :(得分:1)

你应该禁用这两个textFields(在代码中或通过IB),或者你可以禁用用户交互(不同的外观,相同的功能):

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

或者:

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

第二种方法不会改变UITextField的外观,而第一种方法将表明这些TextFields被禁用。

答案 1 :(得分:0)

应该做的事

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

答案 2 :(得分:0)

请试试这个

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

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

}
    else
{
    return YES;
}

}

答案 3 :(得分: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.