2011-12-08 26 views
12

Tôi có một ứng dụng dựa trên tab. Một trong số views trong đó đang đẩy một số modal view controller. Nếu tôi gọi self.presentingViewController trong một số modal view controller, số này trả về tab bar controller, không phải là view controller đang đẩy nó.self.presentingViewController trả về UITabBarController không phải bộ điều khiển xem đẩy nó với currentModalViewController

Tôi thiếu gì ở đây? Có cách nào đáng tin cậy để trả lại phương thức view controller nâng cao phương thức không?

Cảm ơn.

+0

Bạn có tìm thấy câu trả lời không? – dimirc

+0

Tôi nghĩ câu trả lời có thể là parentViewController, mà tôi đang tìm kiếm các công trình trong iOS 8, nhưng không phải 7, ít nhất là trong trường hợp sử dụng của tôi. –

Trả lời

3

Từ tài liệu của Apple:

Việc thực hiện mặc định của thuộc tính này đi lên hệ thống phân cấp view , bắt đầu từ điều khiển quan điểm này. Đầu tiên xem điều khiển nó thấy rằng đã nhận được presentViewController: hoạt hình: hoàn thành: phương pháp, hoặc có thuộc tính định nghĩa definePresentationContext được đặt thành YES được trả lại là giá trị của thuộc tính. Nó tiếp tục đi lên các hệ thống phân cấp cho đến khi nó tìm thấy một giá trị để trả về hoặc nó được vào bộ điều khiển xem gốc.

Vì vậy, mặc dù bộ điều khiển chế độ xem khác đã đẩy nó, chế độ xem của bộ điều khiển chế độ xem đó được bao phủ bởi chế độ xem phương thức. Họ đi lên hệ thống phân cấp cho đến khi nó tìm thấy một bộ điều khiển xem không có chế độ xem bị che khuất, hoặc có definesPresentationContext được đặt thành CÓ hoặc cho đến khi nó đến trình điều khiển chế độ xem gốc, trong trường hợp của bạn là Tab Bar Controller.

Tôi muốn nói rằng trình điều khiển chế độ xem trình bày cần đặt definesPresentationContext thành CÓ để trả lời câu hỏi của bạn về cách trả về bộ điều khiển chế độ xem đã trình bày phương thức này.

+1

Cảm ơn rất nhiều vì đã đi đúng hướng. Tuy nhiên, 'definePresentationContext' không tạo ra bất kỳ sự khác biệt nào. UITabBar vẫn đang trả lời, tôi giả sử vì nó nhận được 'presentViewController: animated: completion:'. Tôi đã phải nghỉ mát để đăng ký bộ điều khiển xem với ứng dụng đại biểu và tham khảo nó theo cách đó. – nekiTamoTip

12

Đây có phải là ứng dụng dành cho iPhone không? Nếu vậy, điều đó giải thích sự nhầm lẫn. Trên iPhone, kiểu trình bày duy nhất là UIModalPresentationFullScreen - số tiền nói rằng trên iPhone, trình điều khiển chế độ xem gốc luôn là bộ điều khiển chế độ xem trình bày. Vâng, trong một giao diện thanh tab, khung nhìn của UITabBarController là bộ điều khiển xem gốc.

Bạn sẽ nhận thấy rằng trên iPhone chế độ xem phương thức không thay thế chế độ xem của trình điều khiển chế độ xem của bạn; nó thay thế giao diện toàn bộ , có nghĩa là nó thay thế giao diện của trình điều khiển thanh tab. Điều này là do trình điều khiển thanh tab thực sự là trình điều khiển chế độ xem trình bày.

Tôi đoán rằng trên iPhone bạn thực sự không nên gửi presentViewController: hoặc presentModalViewController: đến bộ điều khiển chế độ xem có chứa bộ điều khiển thanh tab. Bạn nên gửi nó đến bộ điều khiển thanh tab. Do đó, thư được chuyển đến bộ điều khiển thanh tab cho bạn.

Vì vậy, không có gì thú vị sẽ xảy ra với giá trị presentingViewController trừ khi bạn đang sử dụng iPad. Trên iPad, bạn có thể làm cho chế độ xem phương thức thay thế chế độ xem của trình điều khiển chế độ xem. Để làm như vậy, chế độ xem của phương thức modalPresentationStyle phải là UIModalPresentationCurrentContext. Và trong trường hợp đó, trên thực tế, số presentingViewControllercó thể là là chế độ xem "đẩy bộ điều khiển chế độ xem phương thức".

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