Динамически созданная проверка текстового поля - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь проверить динамически созданные текстовые поля. Общее количество текстовых полей может отличаться. Идея состоит в том, чтобы заполнить пустые поля строкой, такой как игрок 1, игрок 2 и т. Д. Вот что я пытаюсь

-(IBAction)validateTextFields:sender
{
    self.howManyPlayers = 3;
    int emptyFieldCounter = 1;
    NSMutableArray *playersNames = [NSMutableArray arrayWithCapacity:self.howManyPlayers];

      while (self.howManyPlayers > 1) 
      {
        self.howManyPlayers--;
        UITextField *tmp = (UITextField *) [self.view viewWithTag:self.howManyPlayers];

        if (tmp.text == nil) 
        {
            [tmp setText:[NSString stringWithFormat:@"Player %d", emptyFieldCounter]];
            emptyFieldCounter++;
        }
        [playersNames addObject:tmp.text];            
    }
}

Проблема в том, что если я коснусь кнопки, которая вызывает метод validateTextFields. Первое и второе текстовые поля заполняются текстом Player 1 и Player 2, но третье поле не заполняется. Я также замечаю, что если я набираю текст, скажем, во втором поле нажмите кнопку, затем удалите текст и снова нажмите кнопку, чтобы поле не заполнялось текстом Player X.

Как заставить все это работать правильно?

Ответы [ 2 ]

1 голос
/ 07 марта 2012

измените свой код на две строки, например:

 while (self.howManyPlayers >= 1) //edited line
      {

        UITextField *tmp = (UITextField *) [self.view viewWithTag:self.howManyPlayers];

        if (tmp.text == nil) 
        {
            [tmp setText:[NSString stringWithFormat:@"Player %d", emptyFieldCounter]];
            emptyFieldCounter++;
        }
        [playersNames addObject:tmp.text];  
        self.howManyPlayers--;     // moved line     
    }

Я забыл ваш второй вопрос, поэтому отредактировал свой ответ.Для этого попробуйте с этим.Изменить if (tmp.text == nil) на if (tmp.text == nil || [tmp.txt isEqualToString:@""])

0 голосов
/ 07 марта 2012

Причина, по которой заполняются только два поля, заключается в том, что вы проходите через while loop только дважды. Должно быть

while (self.howManyPlayers >= 1) 

Вы также должны переместить декремент в конец цикла while

while (self.howManyPlayers >= 1) 
{
    // other code here

    self.howManyPlayers--;
}

Что касается второй части вашего вопроса, я думаю, что когда вы удаляете текст из элемента управления, он перестает быть нулевым и теперь становится пустой строкой. Так что вам нужно проверить наличие пустой строки, а также nil в вашем коде.

if (tmp.text == nil || [tmp.txt isEqualToString:@""])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...