Изменение изображения UIBarButtonItem UIButton
У меня есть UIBarButtonItem с пользовательским представлением UIbutton с изображением, я хочу иметь другой UIImage для другой ориентации, поэтому вот мой код:
UIButton * backButton = (UIButton *) ((UIBarButtonItem *) self.navBar_.topItem.leftBarButtonItem).customView;
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && IS_IPAD) {
[backButton setBackgroundImage:[UIImage imageNamed:@"back-landscape.png"] forState:UIControlStateNormal];
[backButton setFrame: CGRectMake(0, 0, 46, 35)];
} else {
[backButton setBackgroundImage:[UIImage imageNamed:@"back-reading.png"] forState:UIControlStateNormal];
[backButton setFrame: CGRectMake(0, 0, 23, 19)];
}
Однако это не меняет образ UIButton, почему так?
4 ответа
Попробуй это:-
UIButton * backButton ;
if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && IS_IPAD)
{
backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 66.0f, 36.0f)];
[backButton setImage:[UIImage imageNamed:@"back-landscape.png"] forState:UIControlStateNormal];
}
else
{
backButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 23, 19)];
[backButton setImage:[UIImage imageNamed:@"back-reading.png"] forState:UIControlStateNormal];
[backButton setFrame: CGRectMake(0, 0, 23, 19)];
}
[backButton addTarget:self action:@selector(goToHome) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *HomeButton = [[UIBarButtonItem alloc] initWithCustomView: backButton];
[self.navigationItem setLeftBarButtonItem:HomeButton];
Вы должны уведомить, что вы говорите, что это UIBarButtonItem
, но вы используете UIButton
в коде.
С ios5.0 вы можете использовать UIAppearence Protocol
изменить UIBarButtonItem
фоновое изображение, например:
[[UIBarButtonItem appearance] setBackgroundImage: forState: barMetrics:]
Вы также можете использовать метод elppa, но обратите внимание, что вы можете использовать напрямую UIImageView
для customView
параметр.
Вы можете использовать новый прокси-класс с методом +appereance для проверки DOC, но только для iOS5. Для более ранней поддержки вы можете обновить изображение при вращении представления, используя метод контроллера вида -willRotateToInterfaceOrientation. Чао
Создайте UIBarButton, используя пользовательскую UIButton:
_optionsButton = [UIButton buttonWithType:UIButtonTypeCustom];
[_optionsButton setImage:[UIImage imageNamed:@"menu2.png"] forState:UIControlStateNormal];
[_optionsButton addTarget:self action:@selector(optionsButtonPressed) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem * optionsItem = [[UIBarButtonItem alloc] initWithCustomView:_optionsButton];
Затем установите фоновое изображение, как обычно для этого UIButton (вместо того, чтобы пытаться изменить изображение для UIBarButton).
[_optionsButton setImage:[UIImage imageNamed:@"keyboard.png"] forState:UIControlStateNormal];
Это отлично сработало для меня
Примечание. Когда я проходил через это, я менял изображение в зависимости от текущего изображения. Я обнаружил, что должен был использовать:
if ([[_optionsButton imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed: @"keyboard.png"]]) {
// Code for the certain button function
}
заставить его работать