2013-09-10 26 views
7

Tôi đã tự hỏi nếu viewWillDisappear:viewDidDisappear: được gọi khi iOS chuyển ứng dụng (ví dụ: nút Trang chủ được người dùng nhấn). Điều này sẽ khiến cho khung nhìn biến mất khỏi màn hình, nhưng các cuộc gọi lại có được gọi cho điều này không?Chế độ xemWillDisappear/viewDidDisappear có được gọi khi chuyển đổi ứng dụng không?

+7

Và những gì là kết quả của thử nghiệm của bạn? –

+1

Tôi chắc rằng có những người đã tự hỏi về điều này. Googling vẫn nhanh hơn việc lập một dự án thử nghiệm. – gabor

+0

đại biểu ứng dụng chỉ được gọi trong khi chuyển đổi ứng dụng. –

Trả lời

11

Không, các phương pháp đó sẽ không được gọi trong trường hợp đó.

Để được thông báo khi ứng dụng chạy ngầm, bạn có thể đăng ký thông báo UIApplicationWillResignActiveNotification.

Là một sang một bên, cách dễ nhất để tìm ra loại điều này là chỉ cần xây dựng một ứng dụng siêu nhanh chóng và thiết lập các điểm ngắt.

15

Bạn có thể.

Giải pháp - mà tôi đã sử dụng trước đây - là sử dụng applicationDidEnterBackground:applicationWillEnterForeground: trong ủy quyền ứng dụng của bạn.

Thực hiện việc này trong ứng dụng của bạn.

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    [self.window.rootViewController beginAppearanceTransition:NO animated:NO]; 
    [self.window.rootViewController endAppearanceTransition]; 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    [self.window.rootViewController beginAppearanceTransition:YES animated:NO]; 
    [self.window.rootViewController endAppearanceTransition]; 
} 

Bây giờ bạn viewWillDisappear:, viewDidDisappear:, viewWillAppear:viewDidAppear: phương pháp nhìn hệ thống phân cấp điều khiển của bạn sẽ được gọi khi bạn ứng dụng đi vào nền và trở lại foreground.

Hy vọng tính năng này hoạt động?


Sửa 24/11/16 (Swift 3 phiên bản)

func applicationDidEnterBackground(_ application: UIApplication) { 
    window?.rootViewController?.beginAppearanceTransition(false, animated: false) 
    window?.rootViewController?.endAppearanceTransition() 
} 

func applicationWillEnterForeground(_ application: UIApplication) { 
    window?.rootViewController?.beginAppearanceTransition(true, animated: false) 
    window?.rootViewController?.endAppearanceTransition() 
} 

Sửa 2017/02/01 (tất cả cửa sổ)

func applicationDidEnterBackground(_ application: UIApplication) { 
    for window in application.windows { 
     window.rootViewController?.beginAppearanceTransition(false, animated: false) 
     window.rootViewController?.endAppearanceTransition() 
    } 
} 

func applicationWillEnterForeground(_ application: UIApplication) { 
    for window in application.windows { 
     window.rootViewController?.beginAppearanceTransition(true, animated: false) 
     window.rootViewController?.endAppearanceTransition() 
    } 
} 
+0

Dường như chỉ đơn giản là ngạc nhiên. Nhưng có bất kỳ tác dụng phụ (khó chịu) nào để làm điều này không? –

+0

Trừ khi bạn làm điều gì đó điên rồ như đặt mã khởi tạo trong bất kỳ 'viewWillAppear:' hoặc mã hủy tương tự nào trong 'viewWillDisappear:', tôi không thấy điều này gây ra bất kỳ sự cố nào. Tôi đã không có kinh nghiệm cho đến nay. – Trenskow

+0

Tôi đã thêm mã để hiển thị cách kích hoạt các cuộc gọi trên tất cả các cửa sổ ứng dụng. Đây sẽ là nhược điểm duy nhất của lần đầu tiên - nó chỉ hoạt động trên cửa sổ chính. – Trenskow

Các vấn đề liên quan