11

Tôi muốn hiển thị Chế độ xem - PresentedView qua chế độ xem khác - Background View bằng iOS 7. Trong ứng dụng của tôi, tôi đang sử dụng UITabBArController, vì vậy khi chạy tôi không biết chế độ xem nào sẽ là chế độ xem nền (có thể là bất kỳ mục nào trong tab tab). Dưới đây là cấu trúc:UIModalPresentationStyle.CurrentContext Swift iOS 7

UITabBarController 
    ---> TabItem1 - FirstUIViewController 
    ---> TabItem2 - SecondUIViewController 
    ---> TabItem3 - ThirdUIViewController 

Cần một cái gì đó Như thế này:

enter image description here

Khi tải ứng dụng, tôi đang trên TabItem1 - FirstUIViewController. Khi tôi nhấp vào TabItem3, tôi muốn ThirdUIViewController xuất hiện trên Top trên FirstUIViewController và 'FirstUIViewController' sẽ xuất hiện ở chế độ nền mà không có tương tác người dùng nào được bật.

Những gì tôi đã làm như vậy cho đến nay:

  1. Từ, UIViewControllers được thêm vào như Relationship Controllers xuất hiện như TabBar Item trong `UITabBarController, tôi đã thêm một segue từ tabbarcontroller để ThridViewController.

  2. Changed PresentationStyle cho Segue này để UIModalPresentationStyle.CurrentContext và đã làm dưới đây sửa đổi

    func `viewDidLoad()` { 
        super.viewDidLoad() 
        self.performSegue("identifier", sender: self) 
    } 
    

Không có gì xảy ra và tôi chỉ thấy 'ThridViewController' với nền trắng

  1. Tôi đã thử phương pháp mã hóa thủ công:

    func `viewDidLoad()` { 
        super.viewDidLoad() 
        let overlayController:UIThirdViewController = UIThirdViewController() //This controller has a view added on top of it, which covers top half screen only 
        overlayController.modalPresentationStyle = UIModalPresentationStyle.CurrentContext 
        self.presentViewController(overlayController, animated: true, completion: nil) 
    } 
    

Không thay đổi. Chế độ xem mới sẽ ghi đè chế độ xem ưu tiên. nếu tôi thêm overlayController.view.backgroundColor = UIColor.clearColor() này, tôi thấy một nửa màn hình màu đen và một nửa chứa cái nhìn mới của tôi

Vấn đề điểm:

  1. tôi nên viết mã để khởi tạo ở đâu/gọi ThirdViewController xuất hiện trên đầu trang của chế độ xem hiện tại?
  2. Cách khắc phục sự cố màn hình đen và làm cho nó hoạt động trên iOS 7?

Tôi đang sử dụng Xcode 7 và chạy trên iOS7. Hãy giúp tôi. Đoạn mã làm việc sẽ được đánh giá cao. Không đăng các bài đăng tràn ngăn xếp khác làm câu trả lời, trừ khi mã hoạt động & bạn đã tự thử.

UPDATE: - Với phương pháp này, tôi nhận được một màn hình màu đen

class TabBarViewController: UITabBarController, UITabBarControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
    } 

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 

     let switchController:UIViewController = SwitchViewController() 

     self.presentingViewController?.modalPresentationStyle = UIModalPresentationStyle.CurrentContext 
     self.presentingViewController?.view.backgroundColor = UIColor.clearColor() 
     self.presentViewController(switchController, animated: true, completion: nil) 
     return false 
    } 
} 

Trả lời

3

Biến nó thành Bộ điều khiển chế độ xem vùng chứa tùy chỉnh (Apple Docs). Làm việc mã ví dụ:

class MyTabVC: UITabBarController, UITabBarControllerDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
    } 

    func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
     presentThirdVC() 
     return false 
    } 

    func presentThirdVC() { 
     let myThirdVC = MyThirdVC.makeVC() 

     myThirdVC.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.1) 
     addChildViewController(myThirdVC) 
     var newFrame = CGRectInset(view.bounds, 0, 50) // hack, do what you want 
     myThirdVC.view.frame = newFrame 
     view.addSubview(myThirdVC.view) 
     didMoveToParentViewController(myThirdVC) 
    } 

} 

class MyThirdVC: UIViewController { 
    class func makeVC() -> MyThirdVC { 
     return UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("myThirdVC") as! MyThirdVC 
    } 
} 

Ảnh chụp màn hình:

enter image description here

+0

Liệu nó làm việc trên iOS 7? – Sategroup

+0

Có, tôi tin rằng các API này đã có từ iOS 5, bằng cách xem xét hỗ trợ phiên bản cho addChildViewController. – bobics

4

Bạn nên phân lớp UITabBarController và thêm nó hành vi vào lớp con tùy chỉnh.Đặt ủy quyền UITabBarControllerself và sau đó khi chỉ mục cụ thể được khai thác thay vì cho phép chuyển đổi các tab, bạn hiển thị trình đơn một cách có phương thức. Các phương pháp UITabBarControllerDelegate sẽ cho bạn cơ hội để làm điều đó.

Specifcally sử dụng phương pháp đại biểu này ....

- tabBarController:shouldSelectViewController: 

Bạn có thể trình bày menu khi điều này được gọi mà từng tab và trở về NO. Chỉ cần bạn một viewController trống cho tab này vì nó sẽ không bao giờ được hiển thị cho người dùng.

Đối với bản thân quá trình chuyển đổi, tôi khuyên bạn nên sử dụng phân lớp UIPresentationController để đặt khung xem vùng chứa nhỏ hơn một chút so với kích thước của màn hình và thêm vào "dimmingView". Điều này chỉ có sẵn trên iOS8 mặc dù vậy nếu bạn muốn iOS7, bạn sẽ cần phải làm nhiều thứ khác.

+0

Vui lòng kiểm tra ** CẬP NHẬT tôi ** trong mô tả – Sategroup

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