Предыдущие ответы не решили мою проблему, но этот код сделал:
import sys
for name, module in sorted(sys.modules.items()):
if hasattr(module, '__version__'):
print name, module.__version__
Чтобы изменить изображение для выбранного состояния, вы должны вызвать setImage
для состояния UIControlStateSelected
. Вы можете установить отдельные изображения для разных состояний (Нормальное, Выделено, Отключено, Выбрано и т. Д.).
Код, который у вас есть, должен работать нормально, но я предполагаю, что изображение кнопки не изменится до следующего прогона цикла событий, поэтому вы не увидите его раньше вид отключается.
Это своего рода взлом, но вы можете попробовать немного отложить изменение вида, чтобы кнопка обновилась.
Вместо этого:
[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal];
[self showMyOtherView];
Попробуйте следующее:
[btnthumbnail2 setImage:[UIImage imageNamed:@"leaderboard_ov.png"] forState:UIControlStateNormal];
[self performSelector:@selector(showMyOtherView) withObject:self afterDelay:0.01];
Я написал код, который делает именно это вчера вечером, и мне не пришлось прибегать к какой-либо странной тактике задержки. В этом конкретном случае я делаю это из tableViewCell. Это больше кода, чем вы просили, но он показывает весь процесс, который я использовал. Как видите, я решил не отображать какое-либо специальное изображение в течение определенного периода времени ВО ВРЕМЯ нажатия кнопки.
// Button set up, inside cellForRowAtIndexPath:
// imageFrame is just the rect that you want the button to occupy
[self setFavorite:[[UIButton alloc] initWithFrame:imageFrame]];
[[self favorite] addTarget:self action:@selector(toggleFavorite:)
forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:[self favorite]];
[self draw];
// definition of the callback specified above
- (void) toggleFavorite:(id) sender {
if (favoriteState == 0 ){
favoriteState = 1;
} else {
favoriteState = 0;
}
[self draw];
}
// the draw method, to set the images
// favOn and favOff are statically defined at the top of the class
- (void) draw {
if (favoriteState != 0) {
[[self favorite] setBackgroundImage:favOn forState:UIControlStateNormal];
[[self favorite] setBackgroundImage:favOn forState:UIControlStateHighlighted];
} else {
[[self favorite] setBackgroundImage:favOff forState:UIControlStateNormal];
[[self favorite] setBackgroundImage:favOff forState:UIControlStateHighlighted];
}
}
Я использую Interface Builder, в котором я добавил в представление UIButton
.
Я определил кнопку , выбранную по умолчанию, и выбрал свое изображение для состояния , выбрано (Используйте раскрывающийся список в окне инспектора, чтобы выбрать « Конфигурация выбранного состояния ] "перед выбором изображения).
Создайте IBAction
в контроллере и подключите кнопку к этому действию.
Тогда посмотрите код ниже:
-(IBAction) toggleUIButtonImage:(id)sender{
if ([sender isSelected]) {
[sender setImage:unselectedImage forState:UIControlStateNormal];
[sender setSelected:NO];
} else {
[sender setImage:selectedImage forState:UIControlStateSelected];
[sender setSelected:YES];
}
}
Я думаю, что это довольно простое решение. Надеюсь, это поможет!