0

我正在使用标签以编程方式创建一系列文本字段。我希望能够访问每个文本字段中的数据,但它会不断恢复到最后一个标签。

在此示例中,我创建了 10 个文本字段。当您单击一个字段时,它应该将该字段变为蓝色,但它总是将最后一个字段变为蓝色。

如何访问字段标签以便访问正确的文本字段?

我添加了 NSlog 来测试发件人#。

@implementation ViewController
@synthesize name = _name ;
- (void)viewDidLoad
{
    [super viewDidLoad];
    int y = 20 ;
    for(int i=1; i <= 10; i++)
    {
      CGRect frame = CGRectMake(20, y, 100, 30 ) ;
      name = [[UITextField alloc] initWithFrame:frame];
      [name setTag:i] ;
      [name setBackgroundColor:[UIColor whiteColor]] ;
      [name addTarget:self action:@selector(makeBlue:) forControlEvents:UIControlEventTouchDown];
      [self.view addSubview:name];
      y += 38;
    }
}

- (void)makeBlue:(id)sender
{
    int i = (int)[sender tag] ;
    [name setTag:i] ;
    NSLog(@"%d", i);
    [name setBackgroundColor:[UIColor blueColor]] ;
}

编辑: 太好了。谢谢你。它确实解决了我的一个问题。我想我期待一个不同的答案,这将引导我解决我的第二个问题。我想从标记的文本字段中获取输入以在其他地方使用它。我有同样的问题,我只从最后一个文本字段中获取输入。

- (void)viewDidLoad
{
[super viewDidLoad];

int y = 20 ;
for(int tag=1; tag <= 10; tag++)
{
    CGRect frame = CGRectMake(20, y, 100, 30 ) ;
    name = [[UITextField alloc] initWithFrame:frame];
    [name setTag:tag] ;
    [name setBackgroundColor:[UIColor whiteColor]] ;
    [name addTarget:self action:@selector(makeItSo:) forControlEvents:UIControlEventEditingDidEnd];
    [self.view addSubview:name];
    [name setDelegate:self] ;
    y += 38;
}
}

- (void)makeItSo:(id)sender
{
int tag = (int)[sender tag] ;
[name setTag:tag] ;
NSString * aName = [name text] ;
NSLog(@"%@", aName) ;
}

在此示例中,我不需要在 makeItSo 方法中再次使用 setTag,但我不知道如何从特定标记中获取值。

4

2 回答 2

0

在您的makeBlue: 方法中,您只是无缘无故地重新分配标签。这不会改变视图。name即使您更改其标签,该变量也将指向循环中创建的最后一个视图。如果您想按标签访问视图,请使用:

[self.view viewWithTag:<tag>]

所以你的makeBlue:代码看起来像:

- (void)makeBlue:(id)sender
{
    int tag = (int)[sender tag] ;
    UIView *tagView = [self.view viewWithTag:tag]
    [tagView setBackgroundColor:[UIColor blueColor]] ;
}

因此,要获取文本字段的值,您将使用:

 name = [self.view viewWithTag:[sender tag]];
 NSString *fieldText = name.text;
于 2013-03-21T12:33:26.217 回答
0
NSInteger i =    [sender tag];   
于 2017-03-30T06:31:31.710 回答