动态创建文本字段验证

时间:2012-03-07 13:36:43

标签: objective-c ios validation

我正在尝试验证动态创建的文本字段。文本字段的总数可能会有所不同。 我的想法是用播放器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方法的按钮。第一个和第二个文本字段填充文本播放器1和播放器2,但不填充第三个字段。 我还注意到,如果我输入一个文本,让我们说在第二个字段中触摸按钮,然后删除文本,再次触摸该字段未填充文本播放器X的按钮。

如何让所有事情正常运作?

2 个答案:

答案 0 :(得分:1)

更改两行的代码,如下所示:

 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:@""])

答案 1 :(得分:0)

仅填充两个字段的原因是您只通过while loop两次。它应该是

while (self.howManyPlayers >= 1) 

您还应该将减量移动到while循环的末尾

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

    self.howManyPlayers--;
}

对于问题的第二部分,我认为当您从控件中删除文本时,它将停止为nil,现在变为空字符串。因此,您需要在代码中检查空字符串以及nil。

if (tmp.text == nil || [tmp.txt isEqualToString:@""])