проверяет, для чего будет запущен UITextField (textFieldShouldBeginEditing) - PullRequest
1 голос
/ 16 марта 2011

Я пытался реализовать проверки, для которых будет срабатывать UITextField.Вот результаты моих исследований только для первых двух текстовых полей.Это дает мне две ошибки, в которых говорится "отправитель необъявленный" ... Где я делаю неправильно?Благодаря заранее свойств и синтеза в порядке!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;
}

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Вы на самом деле не объяснили, в чем заключается ваша проблема, но, просто взглянув на свой код, вы используете неправильные имена методов делегата. Вам не нужен отдельный textFieldShouldBeginEditing: для каждого из ваших экземпляров UITextField.

В файле интерфейса класса контроллера представления убедитесь, что вы заявляете, что соответствуете методам 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;
    ...
}
0 голосов
/ 16 марта 2011

Правильно соответствует протоколу UITextFieldDelegate. Затем textFieldShouldBeginEditing будет вызываться обоими UITextFields. Поле UIText зависит от шаблона делегата, поэтому оно ожидает, что его делегатом будет реализован определенный метод, и этот метод должен иметь правильное имя. То, что вы пытаетесь использовать, это шаблон целевого действия, который используется, например, UIButtons.

Чтобы узнать, какой из них был вызван, вы можете использовать параметр UITextfield, который передается методу. Не забудьте установить делегата.

...