检查将触发哪个UITextField(textFieldShouldBeginEditing)

时间:2011-03-15 21:56:59

标签: objective-c uitextfield uitextfielddelegate

我一直在尝试实现将触发UITextField的检查。 以下是我对前两个文本字段的调查结果。 这给了我两个错误,说“发件人未申报”...... 我哪里做错了? 提前致谢 属性和合成都行! val是caLculator按钮的标记值。(例如0,1,2,3,4,5,6,7,8,9)

//.h file

IBOutlet UITextField *textFieldLoanAmountDisplay;
IBOutlet UITextField *textFieldInitDepositDisplay;


// .m file

const NSString *textField1Code= @"1";
const NSString *textField2Code= @"2";


-(BOOL)textField1ShouldBeginEditing:(UITextField *)textFieldLoanAmountDisplay {
    if (textFieldLoanAmountDisplay == textField1Code) 
    {
        UIButton *buttonPressed = (UIButton *)sender;
        int val = buttonPressed.tag;
        if ( [textFieldLoanAmountDisplay.text compare:@"0"] == 0 ) {
            textFieldLoanAmountDisplay.text = [NSString stringWithFormat:@"%d", val ];
        } else {
            textFieldLoanAmountDisplay.text = [NSString stringWithFormat:@"%@%d", textFieldLoanAmountDisplay.text, val ];
        }
    }
    return NO;    
}

-(BOOL)textField2ShouldBeginEditing:(UITextField *)textFieldInitDepositDisplay {
    if (textFieldInitDepositDisplay == textField2Code) 
    {
        UIButton *buttonPressed = (UIButton *)sender;
        int val = buttonPressed.tag;
        if ( [textFieldInitDepositDisplay.text compare:@"0"] == 0 ) {
            textFieldInitDepositDisplay.text = [NSString stringWithFormat:@"%d", val ];
        } else {
            textFieldInitDepositDisplay.text = [NSString stringWithFormat:@"%@%d", textFieldInitDepositDisplay.text, val ];
        }
    }
    return NO;
}

2 个答案:

答案 0 :(得分:2)

您还没有真正解释过您的问题,但只是通过查看您的代码,您使用的是不正确的委托方法名称。对于每个UITextField实例,您不需要单独的textFieldShouldBeginEditing:

在视图控制器类接口文件中,确保声明符合UITextFieldDelegate方法:

@interface XXXXX : XXXXXX <UITextFieldDelegate>

然后在您的实现中,使用

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

如果您使用上面指示的不同标记设置textField实例,只需使用switch语句找出哪个textField正在调用该方法:

switch (textField.tag)
{
    case tagValue1:
    // Implement your logic here
    break;
    case tagValue2:
    // Implement your logic here
    break;
    ...
}

答案 1 :(得分:0)

正确符合UITextFieldDelegate协议。然后两个UITextField都会调用textFieldShouldBeginEditing。 UITextfield依赖于委托模式,因此它期望某个方法由其委托实现,并且该方法必须正确命名。您尝试使用的是UIButtons使用的目标操作模式。

要找出已调用的那个,可以使用传递给该方法的UITextfield参数。不要忘记设置代理。