Краткий ответ:
RE: "Как получить доступ к кнопке UIB с помощью тега ..."
UIButton *tmpButton = (UIButton *)[self.view viewWithTag:tmpTag];
RE: "... и изменить его изображение?"
[tmpButton setImage:[UIImage imageNamed:@"MyGreatImage.png"] forState:UIControlStateNormal];
.
Длинный ответ:
RE: * "Это код, с которого начинается загадка: uibutton aButton.tag == (j + a * N_ROWS + 1)" *
Да, я вижу проблему. Используемая строка предназначена для установки тега кнопки, а не для получения кнопки из тега.
Чтобы получить кнопку из известного тега, сделайте следующее:
// define the tag index
int tmpTag = 123;//replace "123" with your own logic, i.e. (j + a * N_ROWS + 1)
// get the button with the given tag
UIButton *tmpButton = (UIButton *)[self.view viewWithTag:tmpTag];
// assign the image
tmpImage = [UIImage imageNamed:@"MyGreatImage.png"];
[tmpButton setImage:tmpImage forState:UIControlStateNormal];
КОД БОНУСА: На этом этапе вы также можете добавлять или удалять действия, связанные с вашей кнопкой.
//Remove all actions associated the button
[aButton removeTarget:nil action:NULL forControlEvents:UIControlEventAllEvents];
//Assign a new button action: using the exact selector name ("myMethodName")
[aButton addTarget:self action:@selector(myMethodName:) forControlEvents:UIControlEventTouchUpInside];
//Assign a new button action: using a calculated selector name
//(suppose I have a bunch of methods with the prefix "myNumberedMethodName_" followed by an index.
int tmpSomeNumber = 12;
SEL tmpSelector = NSSelectorFromString ([NSString stringWithFormat:@"myNumberedMethodName_%i:",tmpSomeNumber);
// don't forget to include the ":" symbol in the selector name
[aButton addTarget:self action:tmpSelector forControlEvents:UIControlEventTouchUpInside];
ПРИМЕЧАНИЕ. «ViewWithTag» обычно возвращает объект View. Кнопка - это особый тип просмотра со специальными свойствами, такими как изображение. Таким образом, чтобы он возвращал объект Button вместо более общего объекта View, мы инициализируем его как Button, приводя его с использованием (UIButton *) в определении.
Но если все, что вам нужно, это изменить прозрачность кнопки, то вам не нужно использовать ее как кнопку. Вы можете просто инициализировать его как универсальное представление:
// set opacity of a button
float tmpOpacity = 0.5;//half-visible
UIView *tmpView = [self.view viewWithTag:tmpTag];//get the view object associated with button's tag (remember, a button IS a view)
[[tmpView layer] setOpacity:tmpOpacity];
См. Также Кнопка с меткой .