UIView - Làm cách nào để nhận thông báo khi chế độ xem được tải?


79

Có bất cứ điều gì tương tự như viewDidLoadcủa UIViewControllercho a UIView??? Tôi cần được thông báo ngay sau khi UIViewtải xong (Lớp con của UIView) và thực hiện một số hành động.

Câu trả lời:


268

Tùy thuộc vào loại hành động bạn cần thực hiện, có một số kỹ thuật:

  1. -(id)initWithFrame:(CGRect)frame- Trình khởi tạo được chỉ định của UIView; luôn được gửi đến một UIView để khởi tạo nó, trừ khi chế độ xem được tải từ một nib;
  2. -(id)initWithCoder:(NSCoder *)coder - luôn được gửi để khởi tạo UIView bất cứ khi nào chế độ xem được tải từ nib;
  3. -(void)awakeFromNib- được gửi sau khi tất cả các đối tượng trong nib được khởi tạo và kết nối; chỉ áp dụng nếu bạn tải đối tượng từ một ngòi; bạn phải gọi là siêu;
  4. -(void)willMoveToSuperview:(UIView *)newSuperview- được gửi ngay trước khi chế độ xem được thêm dưới dạng một chế độ xem phụ vào một chế độ xem khác; newSuperviewcó thể là con số không khi bạn xóa chế độ xem khỏi chế độ siêu xem của nó;
  5. -(void)willMoveToWindow:(UIWindow *)newWindow- được gửi ngay trước khi chế độ xem (hoặc chế độ xem siêu tốc của nó) được thêm vào cửa sổ; newWindowcó thể là con số không khi bạn xóa chế độ xem khỏi cửa sổ;
  6. -(void)didMoveToSuperview - được gửi ngay sau khi chế độ xem được chèn vào hệ thống phân cấp chế độ xem;
  7. -(void)didMoveToWindow- được gửi ngay sau khi chế độ xem được đặt thuộc tính cửa sổ của nó. -

Về cơ bản, bạn có thể chọn thực hiện các hành động của mình trong quá trình khởi tạo (1 & 2), sau khi tải từ ngòi (3), trước khi chèn vào hệ thống phân cấp chế độ xem (4 & 5) và sau đó (6 & 7).


Cảm ơn rất nhiều câu trả lời hoàn hảo (rất chi tiết). Tôi đã thay đổi một điều khiển phân đoạn và nó không được hiển thị thay đổi bởi vì tôi đã gọi phương thức sửa đổi trong init, tôi chuyển nó đến didMoveToWindow và nó cố định tất cả các vấn đề
aryaxt

1
Có vẻ như tất cả những điều này xảy ra trước viewDidLoad trong viewController
Alex Chan

3
-(void)willMoveToSuperview:(UIView *)newSuperviewlà cách chữa trị cho tất cả các vấn đề của tôi, cảm ơn bạn rất nhiều!
Erion S,

Tôi lại quên rằng một số thứ sẽ không hoạt động nếu bạn tiếp tục làm dịu chúng bên trong UIView ngay từ đầu quá trình khởi tạo ..... Vì vậy, thực hiện nó trong 7 hoặc thực hiện với độ trễ từ đó sẽ luôn hoạt động! :)
Alex Cio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.