UIView-뷰가로드 될 때 알림을받는 방법은 무엇입니까?


79

거기에 무엇이든은 유사하다 viewDidLoadUIViewControllerA에 대한 UIView??? 가로드 되 자마자 알림을 받고 UIView(의 하위 클래스 UIView) 몇 가지 작업을 수행해야합니다.

답변:


268

수행해야하는 작업의 종류에 따라 몇 가지 기술이 있습니다.

  1. -(id)initWithFrame:(CGRect)frame-UIView의 지정된 이니셜 라이저; 뷰가 펜촉에서로드되지 않는 한 초기화를 위해 항상 UIView로 전송됩니다.
  2. -(id)initWithCoder:(NSCoder *)coder -뷰가 nib에서로드 될 때마다 항상 UIView를 초기화하기 위해 전송됩니다.
  3. -(void)awakeFromNib-펜촉의 모든 개체가 초기화되고 연결된 후에 전송됩니다. 펜촉에서 물체를로드하는 경우에만 적용 가능합니다. 슈퍼에 전화해야합니다.
  4. -(void)willMoveToSuperview:(UIView *)newSuperview-보기가 다른보기에 하위보기로 추가되기 직전에 전송됩니다. newSuperview수퍼 뷰에서 뷰를 제거하면 nil이 될 수 있습니다.
  5. -(void)willMoveToWindow:(UIWindow *)newWindow-뷰 (또는 수퍼 뷰)가 창에 추가되기 직전에 전송됩니다. newWindow창에서보기를 제거하면 nil이 될 수 있습니다.
  6. -(void)didMoveToSuperview -뷰가 뷰 계층 구조에 삽입 된 직후에 전송됩니다.
  7. -(void)didMoveToWindow-뷰가 창 속성을 설정 한 직후에 전송됩니다. -

기본적으로 초기화 중 (1 및 2), 펜촉에서로드 한 후 (3), 뷰 계층 구조에 삽입하기 전 (4 및 5), 그 후에 (6 및 7) 작업을 수행하도록 선택할 수 있습니다.


많은 완벽한 답변에 감사드립니다 (매우 상세 함). 나는 세그먼트 화 된 컨트롤을 수정하고 있었는데, init 동안 수정 메소드를 호출했기 때문에 변경 사항이 표시되지 않았습니다. 나는 그것을 didMoveToWindow로 옮겼고 모든 문제를 해결했습니다
aryaxt

1
이 모든이의 ViewController에있는 viewDidLoad 전에 일어난 것 같다
알렉스 찬

3
-(void)willMoveToSuperview:(UIView *)newSuperview내 모든 문제에 대한 치료법이었습니다. 대단히 감사합니다!
Erion S 2015

초기화 프로세스가 시작될 때 UIView 내부에서 계속 보정하면 일부가 작동하지 않는다는 사실을 다시 잊었습니다 ..... 그래서 7에서 수행하거나 거기에서 지연하여 수행하면 항상 작동합니다! :)
Alex Cio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.