Как мне отредактировать все UIB-кнопки с определенным тегом в target-c? - PullRequest
1 голос
/ 06 августа 2011

Я хочу редактировать все кнопки с определенным тегом.Я отметил каждый из UIB-кнопок (которые я построил в IB) от 0-15.Затем я использовал кнопку тега в качестве значения индекса при поиске в моем NSMutableArray (researchationsArray).В моем массиве 16 элементов.

Я хочу реализовать что-то подобное в моем viewWillAppear:

if (theButtonTag == 0){

[button setTitle: [[investigationsArray objectAtIndex:0]objectForKey:@"name"] forState:UIControlStateNormal];

}

Я хотел бы упростить свой код, чтобы в конечном итоге я мог использовать оператор for, напримерэто:

for (buttonTag = 0; buttonTag < [investigationsArray count]; buttonTag ++){

if (theButtonTag == i){    
    [button setTitle: [[investigationsArray objectAtIndex:i]objectForKey:@"name"] forState:UIControlStateNormal];
    }
}

Я просмотрел Google и ничего не могу найти.Спасибо, ребята.

Ответы [ 3 ]

4 голосов
/ 07 августа 2011

Благодаря Inspire48 и Алексу Николу мне удалось придумать ответ на этот вопрос. Если вы попытаетесь начать с i = 0, код выдаст ошибку: 'NSInvalidArgumentException', reason: '-[UIView setTitle:forState:]: unrecognized selector sent to instance 0xa180970. Поэтому, чтобы восполнить это, я просто добавил пустую запись в index0 в свой список pList, который позволяет мне начинать мой оператор for() с i = 1 вместо i = 0.

for (int i = 1; i < [investigationsArray count]; i++) {
        UIButton * button = (UIButton *)[self.view viewWithTag:i];
        NSString * title = [[investigationsArray objectAtIndex:i] objectForKey:@"name"];
        [button setTitle:title forState:UIControlStateNormal];
    }

Следующее изменение, которое мне пришлось внести в код, который использовали как Inspire48, так и Alex Nichol, заключается в следующем. Вместо использования [self viewWithTag:i] вам нужно использовать [self.view viewWithTag:i].

Еще раз спасибо, ребята!

0 голосов
/ 07 августа 2011

Код Inspire48, приведенный выше, почти правильный, с небольшой ошибкой. Вы хотите просмотреть все теги от 0 до 15 и установить для заголовка этой кнопки значение в вашем массиве. Вот пример кода:

for (int i = 0; i < [investigationsArray count]; i++) {
    UIButton * button = (UIButton *)[self viewWithTag:i];
    NSString * title = [[investigationsArray objectAtIndex:i] objectForKey:@"name"];
    [button setTitle:title forState:UIControlStateNormal];
}

В конце я бы предложил НЕ использовать теги кнопок, а использовать кнопки в качестве ключей в NSDictionary. Тогда вы можете получить что-то вроде:

for (UIView * view in [self subviews]) {
    if ([view isKindOfClass:[UIButton class]) {
        UIButton * button = (UIButton *)view;
        NSString * title = [[investigationsDictionary objectForKey:button] objectForKey:@"name"];
        [button setTitle:title forState:UIControlStateNormal];
    }
}

Вы можете инициализировать свой словарь следующим образом:

NSDictionary * investigationsDictionary;
...
investigationsDictionary = [NSDictionary dictionaryWithObjectsAndKeys:button1, myValue,...,nil];
0 голосов
/ 06 августа 2011

Используйте стандартную петлю for, как у вас там. UIView имеет метод с именем viewWithTag , который возвращает представление с указанным тегом. Это именно то, что вы хотите.

Фрагмент кода:

for (int i = 0; i <= 15; i++) {
    UIButton *button = (UIButton *)[self viewWithTag:i];
    [button setTitle: [[investigationsArray objectAtIndex:0]objectForKey:@"name"] forState:UIControlStateNormal];
}
...