2015-12-15 17 views
7

Tôi đang phát triển một ứng dụng cho iPad Pro. Trong ứng dụng này, containerView sử dụng để thêm views bổ sung và tương tác với chúng.Ủy quyền sử dụng Chế độ xem vùng chứa trong Swift

Trước tiên, tôi đã tạo ra một giao thức:

protocol DataViewDelegate { 
    func setTouch(touch: Bool) 
} 

Sau đó, tôi tạo ra bộ điều khiển của tôi đầu tiên xem

enter image description here

import UIKit 

class ViewController: UIViewController, DataViewDelegate { 

    @IBOutlet var container: UIView! 
    @IBOutlet var labelText: UILabel! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    func setTouch(touch: Bool) { 
     if touch == true { 
      labelText.text = "Touch!" 
     } 
    } 

}

Và cuối cùng, tôi đã tạo một cái nhìn sẽ được nhúng trong containerView.

enter image description here

import UIKit 

class ContainerViewController: UIViewController { 

    var dataViewDelegate: DataViewDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    @IBAction func touchMe(sender: AnyObject) { 
     dataViewDelegate?. setTouch(true) 
    } 

}

Nhưng đối với một số lý do, không có gì xảy ra, bộ điều khiển xem đầu tiên nhận được gì trong chức năng setTouch.

Câu hỏi của tôi là: Trong trường hợp này, sử dụng vùng chứa, làm thế nào tôi có thể tạo liên lạc giữa hai ViewsControllers?

+0

Để giao tiếp giữa các bộ điều khiển xem bạn có thể sử dụng ủy nhiệm, như bạn đang làm. Tuy nhiên, bạn nên đọc hướng dẫn lập trình UIViewController của apple https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/DesignTips.html để có các phương pháp hay nhất, đặc biệt là phần có tiêu đề "Đặt từng bộ điều khiển xem một hòn đảo". – beyowulf

Trả lời

4

Có vẻ như bạn đã xác định đại biểu, nhưng chưa đặt đại biểu. Điều này xảy ra với tôi tất cả các thời gian.

+0

Tôi đang ở giai đoạn đầu của Nghị định thư và Đại biểu. Làm thế nào tôi có thể thiết lập các đại biểu? – James

+0

Bạn có thể đặt đại biểu trong chế độ chuẩn bị của controller viewForSegue – beyowulf

17

Giống như @nwales cho biết bạn chưa đặt đại biểu. Bạn nên đặt đại biểu trong hàm prepareForSegue trên viewController đầu tiên của bạn (có chứa viewContainer)

Trước tiên hãy chọn segue nhúng và đặt mã định danh trong thanh tra thuộc tính. Sau đó, trong parentViewController thực hiện func preparForSegue như thế này:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    if(segue.identifier == "the identifier"){ 
     let embedVC = segue.destinationViewController as! ContainerViewController 
     embedVC.dataViewDelegate = self 
    } 
} 
Các vấn đề liên quan