Как получить доступ к UIButton с помощью тега и изменить его изображение? - PullRequest
2 голосов
/ 18 марта 2010

Мне нужно изменить изображения на матрице UIButton-ов, и единственное, что я знаю о кнопках, это тег. Но я не могу найти способ на самом деле использовать этот идентификатор. Кнопки создаются программно во время viewDidLoad.

Вот код для создания кнопок:

#define N_ROWS  4
#define N_COLS  3

    int N_IMG = 0;
    for (int a = 0; a < N_COLS; a++) {
        for (int j = 0; j < N_ROWS; j++) {


            UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
            aButton.frame = CGRectMake(a * 65.0 + 25, j * 65.0 + 15, 10.0, 10.0);
            aButton.tag = j + a * N_ROWS + 1;
            [aButton setBackgroundColor:[UIColor redColor]];

            N_IMG = N_IMG++;
            [self.view addSubview:aButton]; 
            number_sorted =  1;

        }
    }

Вот код для настройки изображения:

- (IBAction)set_image:(id)sender {

    #define N_ROWS  4
    #define N_COLS  3

        int N_IMG = 0;
        for (int a = 0; a < N_COLS; a++) {
            for (int j = 0; j < N_ROWS; j++) {
                uibutton aButton.tag == (j + a * N_ROWS + 1) 
                setImage:[UIImage imageNamed:[puzzles objectAtIndex:N_IMG]]
                            forState:UIControlStateNormal];
            N_IMG = N_IMG++;

            }
        }
    }

Это код, с которого начинается загадка: uibutton aButton.tag == (j + a * N_ROWS + 1)

Кому я могу настроить это на работу?

Ответы [ 2 ]

8 голосов
/ 25 января 2012

Краткий ответ:

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];

См. Также Кнопка с меткой .

4 голосов
/ 18 марта 2010

Я не совсем понимаю, что вы пытаетесь сделать, но почему вы не можете сохранить свои объекты UIButton (т.е. в объекте NSArray), чтобы вы могли получить к ним доступ позже (во втором цикле)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...