UIButton setImage не работает? - PullRequest
       1

UIButton setImage не работает?

2 голосов
/ 16 августа 2011

У меня следующий код, и когда я вызываю этот метод, он не меняет изображение кнопки, хотя в ресурсах есть изображения.

-(void)changeButton:(NSString*)button withURL:(NSString*)url {
    timetableURL = url;

    UIImage *btnImage;

    if ([button isEqual:@"Browser"]) {
        btnImage = [UIImage imageNamed:@"browser-button.png"];
        [safariBtn addTarget:self action:@selector(onSafariButtonPress:) forControlEvents:UIControlEventTouchUpInside];
    }
    else if ([button isEqual:@"Timetable"]) {
        btnImage = [UIImage imageNamed:@"browser-timetable.png"];  
        [safariBtn addTarget:self action:@selector(onTimetableButtonPress:) forControlEvents:UIControlEventTouchUpInside];
    }

    [safariBtn setImage:btnImage forState:UIControlStateNormal];
    [btnImage release];
}

ОБНОВЛЕНО

К вашему сведению: это кнопка вверху UIToolbar.

Ответы [ 5 ]

2 голосов
/ 16 августа 2011

Некоторые вещи, которые кажутся неправильными в вашем коде:

[релиз btnImage] Вы создали это изображение с помощью автоматического выпуска, вы не несете ответственности за его выпуск. Это, скорее всего, закончится странными вещами, т. Е. С чем вы столкнулись.

Вы уверены, что btnImage имеет содержимое после этого оператора if? есть ли вероятность того, что кнопка не равна ни @ "Browser", ни @ "Timetable"?

Также убедитесь, что кнопка находится в нормальном состоянии.

Приветствия

2 голосов
/ 16 августа 2011

Попробуйте,

[safariBtn setBackgroundImage: btnImage forState: UIControlStateNormal];

Нет необходимости выпускать btnImage ...

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

может быть, это поможет вам: установите заголовки кнопки, на которой вы ее создали, и затем проверьте, равно ли это заголовку.

[safariBtn setTitle:@"Safari" forState:UIControlStateNormal];

затем контроль

-(void)changeButton:(NSString*)button withURL:(NSString*)url {
timetableURL = url;

UIImage *btnImage;

if ([button titleForState:UIControlStateNormal] isEqualToString:@"Safari"]) {
    btnImage = [UIImage imageNamed:@"browser-button.png"];
    [safariBtn addTarget:self action:@selector(onSafariButtonPress:) forControlEvents:UIControlEventTouchUpInside];
}
else if ([button titleForState:UIControlStateNormal] isEqualToString:@"Timetable"]) {
    btnImage = [UIImage imageNamed:@"browser-timetable.png"];  
    [safariBtn addTarget:self action:@selector(onTimetableButtonPress:) forControlEvents:UIControlEventTouchUpInside];
}

[safariBtn setImage:btnImage forState:UIControlStateNormal];
[btnImage release];

}

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

Изменить

[button isEqual:@"Browser"]

На

[button isEqualToString:@"Browser"]

isEqual проверяет равенство объектов, а не равенство строк.

РЕДАКТИРОВАТЬ: ОК, вы говорите, что ваша кнопка находится внутрипанель инструментов.В этом случае я предполагаю, что вы добавили его как пользовательский вид в UIBarbuttonItem?Вам нужно пройти через элемент панели кнопок и установить свойство изображения в пользовательском представлении элемента панели кнопок, я думаю (хотя я не уверен), как только вы добавили кнопку в качестве пользовательского представления, элемент панели кнопокделает свою собственную копию, чтобы вы больше не разговаривали с ней через safariBtn.

Вы можете получить доступ к элементам панели инструментов через

for (UIBarButtonItem *barItem in self.toolbar.items)

Предполагая, что этот код находится в вашем viewController.Ваш safariBtn будет доступен через barItem.customView

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

я думаю, что это должно вам помочь ...

    [safariBtn setImage:[UIImage imageNamed:@"browser-button.png"] forState:UIControlStateNormal];
...