我一直在尝试实现将触发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;
}
答案 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参数。不要忘记设置代理。