UIButton и setImage: не работает последовательно - несовместимо
Вопрос
У меня есть UIButton на UIView. Я хочу программно выяснить, какое изображение отображать внутри кнопки при отображении представления. Я переопределил метод drawRect в UIView и использовал setImage для отображения нужного изображения. Однако, когда представление отображается, иногда оно рисует желаемое изображение, а иногда нет. Я должен коснуться в любом месте в представлении, чтобы изображение появилось в кнопке. Пожалуйста, помогите!
Вот метод drawRect для представления.
- (void)drawRect:(CGRect)rect
{
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
}
Все правильно подключено IB. Я не понимаю, почему изображение появляется / не появляется последовательно. Большое спасибо.
Решение
Вы действительно не хотите переопределять drawRect.
Надлежащим образом реализовать UIViewController и переопределить viewWillAppear: .
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
};
Другие советы
Groundhog имеет правильный ответ , но Я просто хотел бы объяснить, что на самом деле происходит с вашим кодом, и почему он иногда работает.
Метод drawRect
вызывается каждый раз, когда система хочет, чтобы ваш объект просмотра отображал себя на экране. Установка изображения кнопки в методе drawRect
изменит изображение кнопки, но поскольку система уже выполняет рисование на экране, вы фактически не увидите изменения до следующего времени представления должны быть перерисованы. В этом случае, когда вы касаетесь где-то еще в представлении.
Спасибо за объяснение. К сожалению, этот код является частью более крупного проекта с другим разработчиком. Я не могу изменить текущий UIView на UIViewController. Вместо этого я изменил изображение кнопки другим способом. Я изменил состояние кнопки непосредственно перед добавлением UIView в подпредставление владельца ViewController. то есть: я выпустил
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
Непосредственно перед добавлением моего UIView в качестве subView. то есть:
[masterViewController.view addSubview:myView];
очевидно, myButton является частью myView. Спасибо за помощь.