我正在尝试验证动态创建的文本字段。文本字段的总数可能会有所不同。 我的想法是用播放器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的按钮。
如何让所有事情正常运作?
答案 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:@""])