UIButton и setImage: не работает последовательно - несовместимо - PullRequest
3 голосов
/ 03 августа 2009

У меня есть UIButton на UIView. Я хочу программно выяснить, какое изображение отображать внутри кнопки при отображении представления. Я переопределил метод drawRect в UIView и использовал setImage для отображения нужного изображения. Однако, когда представление отображается, иногда оно рисует желаемое изображение, а иногда нет. Я должен коснуться в любом месте в представлении, чтобы изображение появилось в кнопке. Пожалуйста, помогите!

Вот метод drawRect для представления.

- (void)drawRect:(CGRect)rect
{
[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
}

Все правильно подключено IB. Я не понимаю, почему изображение появляется / не появляется последовательно. Большое спасибо.

Ответы [ 3 ]

5 голосов
/ 03 августа 2009

Вы действительно не хотите переопределять drawRect.

Надлежащим образом реализовать UIViewController и переопределить viewWillAppear: .

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];
};
2 голосов
/ 03 августа 2009

Groundhog имеет правильный ответ , но я просто хотел бы объяснить, что на самом деле происходит с вашим кодом, и почему он иногда работает.

Метод drawRect вызывается каждый раз, когда система хочет, чтобы ваш объект просмотра отображался на экране. Установка изображения кнопки в методе drawRect приведет к изменению изображения кнопки, но, поскольку система уже выполняет рисование на экране, вы фактически не увидите изменения до следующего время, когда необходимо перерисовать представления. В этом случае, когда вы касаетесь где-то еще в представлении.

1 голос
/ 04 августа 2009

Спасибо за объяснение. К сожалению, этот код является частью более крупного проекта с другим разработчиком. Я не могу изменить текущий UIView на UIViewController. Вместо этого я изменил изображение кнопки другим способом. Я изменил состояние кнопки непосредственно перед добавлением UIView в подпредставление владельца ViewController. то есть: я выдал

[myButton setImage:[UIImage imageNamed:@"myImage.png"] forState:UIControlStateNormal];

Непосредственно перед добавлением моего UIView в качестве subView. то есть:

[masterViewController.view addSubview:myView];

очевидно, myButton является частью myView. Спасибо за помощь.

...