2015-03-04 16 views
15

Tôi có một containerView với toàn màn hình bên trong VC. Nếu tôi thêm một đứa trẻ đến containerView bằng tay từ một Storyboard làm một segue nhúng có vẻ tốt đẹp: enter image description hereTải một ViewController bên trong một khung nhìn Container

Nhưng tôi nhúng VC theo mã:

class BannerContainerVC: UIViewController { 

    @IBOutlet weak var container: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let vc = storyboard?.instantiateViewControllerWithIdentifier("test") as UIViewController 
    self.container.addSubview(vc.view) 
    } 
} 

tôi nhận được kết quả siêu lạ: enter image description here

Trả lời

50

Bạn cần phải nói cho bộ điều khiển xem BannerContainer của bạn rằng nó có một bộ điều khiển con mới, và để nói với Child rằng nó có một VC mẹ. Điều này được mô tả trong Apple Documents here. Như thế này:

[self addChildViewController:vc]; 
    vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height); 
    [self.container addSubview:vc.view]; 
    [vc didMoveToParentViewController:self]; 

Hoặc trong Swift:

self.addChildViewController(vc) 
    vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height); 
    self.container.addSubview(vc.view) 
    vc.didMoveToParentViewController(self) 

này đảm bảo rằng nhiều bố trí và liên lạc phương pháp được chuyển qua cho đứa trẻ VC; Tôi nghi ngờ các vấn đề bố trí bạn có thể là do những phương pháp hiện không được gọi.

+0

Quả thực nó sửa chữa các vấn đề khó khăn của tôi trên quan điểm chield –

+0

làm thế nào để loại bỏ một viewController từ một containerView trong nhanh? bởi vì khi tôi thêm một viewController, và cái khác, cái đầu tiên vẫn được nhúng? –

+0

Xem "Xóa Bộ điều khiển Xem Trẻ em" trong liên kết được nhúng trong câu trả lời của tôi. Về cơ bản bạn chỉ cần đảo ngược quá trình: gọi 'willMoveToParentViewController' trên con, loại bỏ khung nhìn, sau đó gọi' removeFromParentViewController'. @AymenBRomdhane – pbasdf

6

Cố gắng sử dụng câu trả lời ở trên nhưng hóa ra là CGRectMake không khả dụng nữa.

Cập nhật cho Swift 3:

self.addChildViewController(vc) 
vc.view.frame = CGRect(x: 0, y: 0, width: self.container.frame.size.width, height: self.container.frame.size.height) 
self.container.addSubview(vc.view) 
vc.didMoveToParentViewController(self) 
+0

và vc.didMoveToParentViewController (tự) bây giờ là vc.didMove (toParentViewController: self) –

+0

@LuizDias Điều này cho phép chiều cao động của Chế độ xem vùng chứa không? – ethanfox27

+0

Có, @ ethanfox27. Nhưng bạn cần cung cấp kích thước khung chính xác tại 'self.container.frame.size.width' và' self.container.frame.size.height' –

-2

Cập nhật cho Swift 4

self.addChildViewController(vc) 
vc.view.frame = CGRect(x: 0, y: 0, width: self.container.frame.size.width, height: self.container.frame.size.height) 
self.container.addSubview(vc.view) 
vc.didMovestrong text(self) 
Các vấn đề liên quan