2013-03-21 2 views
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]] ; 
} 

EDIT: Это здорово. Спасибо. Это, безусловно, решило одну из моих проблем. Наверное, я ожидал другого ответа, который привел бы меня в направлении решения моей второй проблемы. Я хочу взять ввод с пометкой текстового поля, чтобы использовать его в другом месте. У меня та же проблема, что я получаю только данные из последнего текстового поля.

- (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) ; 
} 

В этом примере я не нужно снова использовать SetTag в методе makeItSo, но я не знаю, как получить значение из определенного тега.

+0

Это то же самое решение. Фокус в том, чтобы получить ссылку на правильное представление/текстовое поле. После этого вы можете использовать обычные методы для доступа к значению/изменению цвета или делать все, что хотите. – Rakesh

ответ

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; 
+0

Это замечательно. Спасибо. Это, безусловно, решило одну из моих проблем. Наверное, я ожидал другого ответа, который привел бы меня в направлении решения моей второй проблемы. –

+0

@Brian: Я отредактировал ответ. – Rakesh

+0

Спасибо, это огромная помощь. –

Смежные вопросы