如何在循环中设置UITextField的正确标记

时间:2014-05-28 08:42:32

标签: objective-c

我有一个生成100个文本字段10x10的循环。

int counter=0;
for (int i = 0; i < 10; i++) 
{
    for (int ii = 0; ii < 10; ii++) 
    {
        counter++;
        UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(0 + 25 * i ,60+25*ii,25,25)];
        counter++;
        tf.tag =counter;

        [self.view addSubview:tf];
    }
}
  • 上面的代码将创建所有100个文本字段,但标签分配非常严重并且顺序不正确。

这就是我得到的:

1.Tags表示

1 11 21 31 41 51 61 71 81 91
2 12 22 32 42 52 62 72 82 92
3 …………

2.这就是我想要的:

1  2  3  4  5  6  7  8  9  10
11 12 13 14 15 16 17 18 19 20
21………..

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

所以,忘掉counter。您可以使用iii检索它。

让我们看看你的2 for循环是做什么的,其中“ - ”表示什么都没有,并且“•”UITextField被放置。

----------
----------
----------

然后:

•---------
----------
----------

然后:

•---------
•---------
----------

因此,我们很快发现i代表一列,ii代表一行。把它们重命名就好了。
现在,如果您已经记录iii,那么您可以找出逻辑是什么,这是:

[tf setTag:(ii*10+i+1)];

请注意,这只是一个善意的建议(不是“如果您自己进行调试就可以单独完成”),有时会记录事物(例如我们的案例中的计数器:iii )当它变得棘手时,理解它们,特别是在循环中。当我的循环没有达到我的预期时,我经常这样做。

答案 1 :(得分:1)

for (int i = 0; i < 10; i++)
{
    for (int ii = 0; ii < 10; ii++)
    {
        UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(0 + 25 * ii,60+25*i, 25, 25)];
        tf.tag = ii + i * 10 + 1;
        [self.view addSubview:tf];
    }
} 

答案 2 :(得分:0)

另一种可能性:

int row = 0;
int column = 0;

for (int i = 0; i < 100; i++) {
   if (!(i % 10) && i) {
      row++;
      column = 0;
   }
   CGRect newRect = CGRectMake(25.0 * column, 60.0 + 25.0 * row, 25.0, 25.0);
   UITextField *tf = [[UITextField alloc] initWithFrame:newRect];

   tf.tag = i;
   [self.view addSubview:tf];

   column++;
}