2015-11-22 24 views
12

Điều tôi muốn đạt được:Truy cập vùng chứa xem thuộc tính con nhanh chóng

Người dùng nhấn nút trong ViewController, màu của nút được đặt trong chế độ xem vùng chứa sẽ đổi màu thành màu đỏ.

Làm cách nào tôi có thể truy cập vào nút được đặt trong chế độ xem vùng chứa, từ ViewController?

enter image description here

Trả lời

23

Từng bước:

  1. Đặt tên segue giữa bộ điều khiển tầm nhìn của bạn và xem chứa bộ điều khiển.
  2. Thêm thuộc tính vào bộ điều khiển chế độ xem của bạn sẽ chứa bộ điều khiển chế độ xem bộ chứa.
  3. Trong trình điều khiển chế độ xem của bạn, hãy triển khai phương thức prepareForSegue(_:sender:).
  4. Trong việc kiểm tra phương pháp nếu segue.identifier bằng nhận dạng mà bạn chỉ định ở bước 1.
  5. Nếu đúng, sau đó lưu segue.destinationViewController đến tài sản của bạn từ bước 2.
  6. Bây giờ bạn đã xem bộ điều khiển chứa lưu trữ trong tài sản của bạn để bạn có thể làm tùy biến từ lớp học của bạn. Bạn đã có bộ điều khiển xem được lưu trữ theo phương thức viewDidLoad().

Ví dụ:

var containerViewController: YourContainerViewControllerClass? 
let containerSegueName = "testSegue" 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == containerSegueName { 
     containerViewController = segue.destinationViewController as? YourContainerViewControllerClass 
    } 
} 
+0

Cảm ơn rất nhiều câu trả lời chi tiết của bạn nhưng tôi có thể cho phép nói chỉnh sửa MyButton.backgroundColor = UiColor.blackColor() ở đâu? và làm cách nào để thêm chức năng ghi đè vào tác vụ của nút được đặt trong bộ điều khiển xem của tôi? – Anokrize

+0

'containerViewController.MyButton.backgroundColor..' trong bộ điều khiển xem của bạn (không phải bộ điều khiển xem bộ chứa) – sunshinejr

+0

Yep làm việc cho tôi cảm ơn rất nhiều cho câu trả lời chi tiết !! – Anokrize

8

Tôi khuyên bạn nên không phải dựa vào segue.identifier, mà đúng hơn là thử nghiệm cho destination loại trực tiếp:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    super.prepare(for: segue, sender: sender) 

    if let vc = segue.destination as? YourViewController { 
     vc.someVariable = true 
    } 
} 

Bằng cách này bạn tránh những sai lầm với một tên segue sai chính tả .

+0

Đây phải là câu trả lời được chấp nhận. Nếu bạn có nhiều hơn thì một UIContainerView và thử cách tiếp cận .identifier bạn sẽ thất bại: D cảm ơn @andrey – Tom

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