Есть ли метод viewDidAppear для UIView (не UIViewController)? - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно понять, когда UIView появляется на экране, поэтому мне нужен аналог метода viewDidAppear.

Я нашел жизненный цикл UIView:

  1. willMoveToSuperview
  2. invalidateIntrinsicContentSize
  3. didMoveToSuperview
  4. awakeFromNib
  5. willMoveToWindow
  6. needsUpdateConstraints
  7. didMoveToWindow
  8. layoutSubviews
  9. drawRect

Я испробовал все эти методы, но не получил ответа.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Посмотрите, viewDidAppear - это метод UIViewController, который представляет момент, когда действительно появился view ViewController, и позволяет вам объявить, что должно произойти.

UIView не имеет такого метода.Это происходит из паттерна MVC: контроллер в данном случае UIViewController, который контролирует изменения, действия и т. Д., А view - это то, что показывает контроллер.

0 голосов
/ 17 декабря 2018

Нет, нет viewDidAppear в UIView.вы можете переопределить func drawRect, чтобы внести любые изменения в пользовательский интерфейс, которые вам нужны в UIView унаследованном представлении.

SideNote - Если вы хотите, чтобы drawrect обновлялся позднее,Звоните setNeedsDisplay.setNeedsDisplay не будет немедленно вызывать drawRect, но помечает весь прямоугольник границ получателя как необходимый для перерисовки.

Другими словами - вы никогда не должны вызывать drawRect самостоятельно.Вместо этого вы сообщаете системе, что рисование необходимо выполнить с помощью метода setNeedsDisplay, который помечает представление как грязное.И метод drawRect подкласса будет затем вызываться во время следующего цикла обновления.

В соответствии с запросами от OP (@Alexander) ему просто нужно установить некоторую переменную, поэтому желательно использовать любуюиз следующих функций переопределения, в зависимости от действия, которое необходимо выполнить

  • -(void)didMoveToSuperview - отправляется сразу после вставки представления в иерархию представления.

  • -(void)didMoveToWindow - отправлено сразу после того, как представление получает свой набор свойств окна.

  • -(void)willMoveToSuperview:(UIView *)newSuperview - отправлено непосредственно перед добавлением представления в качестве подпредставления к другому представлению;newSuperview может быть ноль при удалении вида из его суперпредставления.

  • -(void)willMoveToWindow:(UIWindow *)newWindow - отправляется непосредственно перед добавлением вида (или его суперпредставления) в окно;newWindow может быть ноль при удалении вида из окна.

...