2015-04-11 30 views
28

Tôi có Chế độ xem vùng chứa mà tôi đã xuất hiện trong bảng phân cảnh của mình. Có một mũi tên nhỏ tuyệt vời đại diện cho segue nhúng đến một cảnh khác. Đối tượng cấp cao nhất của cảnh đó được điều khiển bởi một tùy chỉnh UIViewController. Tôi muốn gọi một phương thức được triển khai trong lớp tùy chỉnh của tôi. Nếu tôi có quyền truy cập vào vùng chứa, làm thế nào để tôi có thể tham khảo nội dung bên trong?Làm thế nào để có được các khung nhìn bên trong một thùng chứa trong Swift?

Trả lời

70

Bạn có thể sử dụng prepareForSegue, một phương pháp trong UIViewController, để truy cập vào bất kỳ số UIViewController nào được tách biệt với bộ điều khiển chế độ xem hiện tại của bạn, bao gồm khoảng cách embed.

Từ các tài liệu về prepareForSegue:

Việc thực hiện mặc định của phương pháp này không có gì. Bộ điều khiển xem của bạn ghi đè phương thức này khi nó cần truyền dữ liệu có liên quan đến trình điều khiển chế độ xem mới. Đối tượng segue mô tả quá trình chuyển đổi và bao gồm các tham chiếu đến cả hai bộ điều khiển xem có liên quan đến phân đoạn.

Trong câu hỏi bạn đã đề cập cần gọi phương thức trên bộ điều khiển chế độ xem tùy chỉnh của bạn. Dưới đây là ví dụ về cách bạn có thể thực hiện điều đó:

1. Đặt mã nhận dạng nhúng của bạn. Bạn có thể thực hiện việc này trong Trình tạo giao diện bằng cách chọn phân đoạn của bạn, chuyển đến Trình biên tập thuộc tính và tìm kiếm theo Bảng phân cảnh nhúng Segue.

enter image description here

2. Tạo lớp một cái gì đó của bạn như:

Một tài liệu tham khảo được giữ ở embeddedViewController nên myMethod có thể được gọi sau. Nó được khai báo là một tùy chọn không được khai báo hoàn toàn bởi vì nó không có ý nghĩa để cung cấp cho nó một giá trị ban đầu không phải là nil.

// This is your custom view controller contained in `MainViewController`. 
class CustomViewController: UIViewController { 
    func myMethod() {} 
} 

class MainViewController: UIViewController { 
    private var embeddedViewController: CustomViewController! 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if let vc = segue.destination as? CustomViewController, 
        segue.identifier == "EmbedSegue" { 
      self.embeddedViewController = vc 
     } 
    } 

    // Now in other methods you can reference `embeddedViewController`. 
    // For example: 
    override func viewDidAppear(animated: Bool) { 
     self.embeddedViewController.myMethod() 
    } 
} 

3. Đặt lớp UIViewControllers của bạn trong IB sử dụng nhận dạng Inspector. Ví dụ:

enter image description here

Và bây giờ mọi thứ sẽ hoạt động. Hy vọng rằng sẽ giúp!

+0

PrepareForSegue có func bị ghi đè từ cái gì khác không? – FlaqueDeau

+0

Điều này làm việc tuyệt vời, tuy nhiên tôi nhận thấy tôi không cần 'where segue.identifier ==" EmbedSegue "' bit, bạn có lẽ sẽ cần rằng nếu bạn có nhiều bộ điều khiển nhúng, nhưng chỉ với một, có vẻ như bạn don không cần định danh. – TaylorAllred

10

Câu trả lời của ABaker là cách tuyệt vời để phụ huynh tìm hiểu về đứa trẻ. Để mã trong trẻ tiếp cận được với cha/mẹ, hãy sử dụng self.parent (hoặc trong ObjC, parentViewController).

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