textFieldDidBeginEditing: для более чем одного текстового поля - PullRequest
10 голосов
/ 16 апреля 2011

Я довольно новичок в программировании для iphone, и здесь я сталкиваюсь с некоторыми проблемами. Теперь в моем приложении у меня есть два текстовых поля, и я хочу вызвать событие, когда второе текстовое поле начинает редактирование. сейчас я использую следующую функцию

- (void)textFieldDidBeginEditing:(UITextField *)textField

но дело в том, что событие запускается, когда начинается редактирование первого текстового поля. Не ждет второго текстового поля. Можно ли как-нибудь использовать эту функцию для второго текстового поля или, может быть, каким-то образом узнать и передать ему значение активного текстового поля?

Я попытался написать имя текстового поля вместо (UITextField *) textField в функции, но результат все тот же.

Ответы [ 6 ]

26 голосов
/ 16 апреля 2011

На вашем месте я бы установил тег (в Интерфейсном Разработчике) второй textField на 2 или что-то подобное.Тогда вы можете просто сделать это:

-(void)textFieldDidBeginEditing:(UITextField *)textField {     
    if (textField.tag == 2) {
        //this is textfield 2, so call your method here
    }
}

РЕДАКТИРОВАТЬ : Пожалуйста, сделайте это, чтобы увидеть, если метод даже вызывается:

-(void)textFieldDidBeginEditing:(UITextField *)textField {     
    NSLog(@"The method was called");
}

Для Свифт 2,2

func textFieldDidBeginEditing(textField: UITextField) {
    if textField.tag == 2 {
        //this is textfield 2, so call your method here
    }
}
16 голосов
/ 16 апреля 2011

Этот метод делегата будет вызываться каждый раз, когда начинается редактирование ЛЮБОГО текстового поля, поэтому именно вы должны контролировать, что будет сделано, когда это произойдет. Я предлагаю вам сделать что-то вроде:

   -(void)textFieldDidBeginEditing: (UITextField *)textField
   {     
        if (textField == mySecondTextField)
        {
            //Do what you need
        }
        else
        {
            //Do nothing
        }
   }

Надеюсь, это вам поможет!

4 голосов
/ 16 апреля 2011

Используйте свойство тега в Интерфейсном Разработчике, чтобы идентифицировать ваши объекты представления в вашем приложении во время выполнения.Это сделает жизнь намного проще, особенно когда вы будете готовы локализовать ваше приложение для разных языков.

Screenshot of the tab property in IB

В вашем заголовочном файле для контроллера представления

#define kUsernameField 100
#define kPasswordField 101
#define kStartButton 300

В файле реализации контроллера представления

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    switch (textField.tag) {
        case kUsernameField:
            // do user name stuff
            break;

        case kPasswordField:
            // do password stuff
            break;

        default:
            NSLog(@"No case statement for %@", [textField description]);
            break;
    }    
}

Вы найдете множество учебников, которые используют поле заголовка UIButton для их идентификации.Например:

- (IBAction)buttonTouchUp:(id)sender {
    UIButton *button = (UIButton *)sender;

    // don't like
    if ([button.currentTitle isEqualToString:@"Start"] == NSOrderedSame) {
        // because if localize your for other language then you will have
        // include code for those other language
        //     French: Démarrer
        //     Spanish: Inicio
        // blah blah blah
    }

    // better
    if (button.tag == kStartButton) {
        // very simple, no code changes for localization
        // blah blah blah
    }

}

Если вы создаете объект с кодом, вы можете установить тег:

button.tag = kStartButton;
// or
[button setTag:kStartButton];
2 голосов
/ 19 февраля 2014

Вы должны сначала объявить UITextFieldDelegate в вашем контроллере .h

и установить делегат своего текстового поля.ех.myInput.delegate = self;

-(void)textFieldDidBeginEditing:(UITextField *)sender
{
    if ([sender isEqual:myInput])
    {
        NSLog(@"test");

    }
}

Это прекрасно работает для меня.

1 голос
/ 19 марта 2013

Вы проверили, установлен ли ваш второй делегат textViews на себя?У меня была та же проблема, когда я забыл установить делегат других textFields и, следовательно, метод делегата не был запущен.

0 голосов
/ 16 апреля 2011

Пожалуйста, посмотрите на мой ответ в этом Вопросе, это именно то, что вы ищете Цель C: что такое "(id) отправитель"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...