2013-03-02 25 views
8

Trường hợp: hai UITabBarController, mỗi tab có tab riêng, nhưng tab cuối cùng trong cả hai giống hệt nhau vì vậy muốn một UIViewController hiển thị nội dung.Hai UITabBarControllers chia sẻ một ViewController (dưới dạng nội dung tab)?

Sự cố khi chạy: Mục được chia sẻ chỉ xuất hiện trong một của bộ tab khi được hiển thị.

Câu hỏi: có ai biết cách tạo tác phẩm này không?

Liên kết với đồ họa bên ngoài của thiết lập kịch bản: (xin lỗi, không có đủ uy tín để gửi hình ảnh ở đây!) Storyboard graphic

dự án với kịch bản mà

Một Xcode: XCode Project

Mỗi mục nội dung tab có lớp UIViewController riêng. Chúng không chứa mã trừ dòng để làm cho các nút quay lại hoạt động. Thực tế là một ứng dụng iPad, nơi các bộ điều khiển tab được hiển thị trong các popovers, popovers là "property editors", trong đó các đối tượng khác nhau có các thuộc tính khác nhau, nhưng tất cả đều chia sẻ một tập hợp các thuộc tính chung. do đó, một tab cho đạo cụ "duy nhất", một nội dung tab được chia sẻ cho các đạo cụ "phổ biến" mà tất cả các đối tượng đều có.)

Tôi đã tìm thấy một số cách để có được hiệu ứng mình muốn, nhưng nếu bảng phân cảnh này hoạt động nó sẽ là một giải pháp dễ dàng hơn nhiều.

- Thông tin khác, phần nào không liên quan đến câu hỏi -

giải pháp thay thế Tôi đang sử dụng: TabBarControllers chỉ liên kết đến một VC như nội dung tab. Khi thẻ đó tải VC, tôi sử dụng mã để (a) khởi tạo VC được chia sẻ từ bảng phân cảnh bằng mã định danh, (b) thêm đối tượng VC mới vào TabBarController qua [tabController setViewControllers: list animated: NO].

(Một giải pháp khả thi Tôi thích thậm chí ít hơn:.. Không sử dụng một TabBarController, và trình bày nội dung VC với "tab" của riêng tôi đồ họa được vẽ vào chúng, mỗi hiển thị "bản thân mình" như chọn Yuk)

Vì vậy, tôi có một giải pháp làm việc, tôi chỉ tò mò là tại sao điều này không làm việc (chỉ là một điều được biết đến trong iOS API, hoặc một số thiết lập thuộc tính ma thuật có thể khiến nó hoạt động?)

+0

Lưu ý câu hỏi tương tự với trọng tâm khác (các công cụ kỳ lạ đang diễn ra ở đó với các bảng và các chế độ xem được sử dụng lại và như vậy ...): http://stackoverflow.com/questions/8620619/uitabbarcontroller-storyboard-connecting-viewcontroller- thats-already-connecte? rq = 1 –

+0

Tôi không chắc chắn những gì bạn đang cố gắng hoàn thành. Giải pháp của bạn, nơi bạn thêm tab thứ hai trong mã, có thể được thực hiện trong bảng phân cảnh bằng cách chỉ cần sao chép bộ điều khiển dùng chung và gắn một ví dụ cho mỗi bộ điều khiển thanh tab. Trong cả hai trường hợp, bạn sẽ nhận được hai trường hợp khác nhau của bộ điều khiển "được chia sẻ". – rdelmar

+0

Những gì tôi đang cố gắng hoàn thành là không phải chỉnh sửa bố cục giao diện người dùng trong một số bản sao của cảnh "một" bảng phân cảnh khi tôi quyết định cần phải có bố cục nút và màu nền khác. Trong ví dụ này, sẽ chỉ có hai bản. Trong ứng dụng thực tế của tôi, sẽ có khả năng là 10+, do đó mong muốn chia sẻ. Đã cố gắng tránh bên ngoài giao diện người dùng thành các tệp .XIB và tải từ đó, đó là những gì cốt truyện được dự định di chuyển ra khỏi đó. –

Trả lời

0

Bạn không thể đặt cùng một xem thể hiện điều khiển thành hai bộ điều khiển tab. Vấn đề là một trường hợp xem (UIView) chỉ có thể có một chế độ xem chính (superview). Khi bạn cố gắng thêm bộ điều khiển xem vào tab thứ 2, khung nhìn của trình điều khiển xem sẽ bị loại bỏ khỏi bố mẹ thứ nhất (tab đầu tiên) và sau đó được thêm vào tab thứ hai.

+0

Tôi không đồng ý, nhưng tôi không chắc chắn đó là gốc của vấn đề. Toàn bộ nút TabBarController biến mất, không chỉ xem. ViewController thứ hai không bao giờ được đặt ở tất cả trong mảng ViewControllers của TabBarController thứ hai. Mặc dù đúng là [view addSubview: sub] khiến cho phụ được xóa khỏi bất kỳ chế độ xem cha mẹ hiện có nào dưới dạng tác dụng phụ, vấn đề có vẻ phức tạp hơn. Tôi muốn nhận được xác nhận rằng việc thực hiện Storyboard của apple không có khả năng tự động instantiating hai trường hợp của SharedViewController (tạo hai đối tượng xem). –

+0

Ngoài ra: chỉ có một TabBarController được trình bày tại một thời điểm, vậy tại sao không phải là mỗi khả năng sử dụng đầy đủ của một ví dụ của SharedViewController? Tôi đồng ý sẽ có vấn đề có Xem ở hai nơi cùng một lúc, nhưng đó không phải là trường hợp ở đây trừ khi API đang giữ toàn bộ ViewController được đặt cho bảng phân cảnh trong bộ nhớ khi không được trình bày. Nó không có vẻ quan trọng mà TabBarController bạn hiển thị đầu tiên, vì vậy nó không giống như khi bạn hiển thị nó nó "nhận được kiểm soát" của Xem và trình bày thứ hai sau đó lấy quan điểm từ hệ thống phân cấp của người khác. Tab là * không bao giờ * được hiển thị trong TBController thứ hai. –

0

Tôi tình cờ gặp thread của bạn trong khi chạy vào cùng một vấn đề hôm nay ... Giải pháp là tạo bản sao của bộ điều khiển chế độ xem trong bảng câu chuyện và đính kèm bản sao vào bộ điều khiển thanh tab khác. Tôi chỉ làm điều đó và nó hoạt động ... Tôi nghĩ rằng 'rdelmar' là đúng về điều này ... sao chép nó và đặt nó .. !!

+3

Qua đó tạo ra một cơn ác mộng khi cập nhật hàng tá bản sao của cảnh kịch bản mỗi lần bạn muốn thực hiện thay đổi bố cục. Sao chép mọi thứ và sử dụng các bản sao giống hệt nhau nhưng ở nhiều nơi chỉ làm cho người lập trình trong tôi muốn ném lên một chút ... :-) –

0

Tôi đã gặp phải vấn đề tương tự này ngay hôm nay. Tôi đã xoay xở để tìm ra cách giải quyết có vẻ như là lừa. Điều quan trọng là thêm một lớp tách biệt giữa thanh tabbar và bộ điều khiển bạn muốn sử dụng lại. Từ mỗi thanh tabbar, tôi đã tạo mối quan hệ với UIViewController riêng biệt với chế độ xem vùng chứa.Sau đó, bạn có thể thực hiện phân đoạn 'nhúng' từ vùng chứa đến trình điều khiển mà bạn thực sự muốn sử dụng lại làm chế độ xem tab. Nó không phải là khá sạch sẽ như là một kết nối trực tiếp (không chắc chắn lý do tại sao mà không được hỗ trợ) vì bạn phải tạo một lớp điều khiển cho mỗi trường hợp tái sử dụng. Nó vẫn là một giải pháp tốt hơn so với cơn ác mộng của việc phải lặp lại xem tab thực tế (cũng như bất kỳ chế độ xem bổ sung nào kết nối với nó) cho mọi lần sử dụng.

Hy vọng điều này sẽ hữu ích. Hãy cho tôi biết nếu có ai cần thêm chi tiết.

+0

Tôi rõ ràng đã chuyển sang (và tiếp tục với bản sao) nhưng tôi nghĩ giải pháp của bạn sẽ hoạt động ... giả sử bạn có thể có nhiều phân đoạn ebed "gửi đến" cho trình điều khiển chế độ xem nội dung. Bạn nói đúng là nó ít trực tiếp hơn, và tạo ra một nỗi đau vì bộ điều khiển tab không thể tham chiếu đến nội dung của nó (đó sẽ là bộ điều khiển xem bộ chứa) trực tiếp. Nhưng rõ ràng không có ai đã đăng một giải pháp tốt hơn ... :-) –

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