UIButton и setImage: не работает последовательно - несовместимо

StackOverflow https://stackoverflow.com/questions/1219852

  •  10-07-2019
  •  | 
  •  

Вопрос

У меня есть 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. Спасибо за помощь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top