我正在使用标签以编程方式创建一系列文本字段。我希望能够访问每个文本字段中的数据,但它会一直恢复到最后一个标记。
在这个例子中,我创建了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,但我不知道如何从特定标记中获取值。
答案 0 :(得分: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;
答案 1 :(得分:0)
NSInteger i = [sender tag];