【问题标题】:checks for which UITextField will be triggered (textFieldShouldBeginEditing)检查将触发哪个 UITextField (textFieldShouldBeginEditing)
【发布时间】:2011-03-15 21:56:59
【问题描述】:

我一直在尝试实现将触发 UITextField 的检查。 以下是我仅针对前两个文本字段的发现结果。 这给了我两个错误,说“未声明发件人”...... 我在哪里做错了? 提前致谢 属性和合成都OK! val 是计算器按钮的标记值。(例如 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;
}

【问题讨论】:

标签: objective-c uitextfield uitextfielddelegate


【解决方案1】:

您还没有真正解释您的问题是什么,但只是通过查看您的代码,您使用了不正确的委托方法名称。对于每个 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;
    ...
}

【讨论】:

    【解决方案2】:

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

    要找出调用了哪一个,您可以使用传递给该方法的 UITextfield 参数。不要忘记设置委托。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多