2012-05-30 25 views
14

Tôi tạo ra một bộ điều khiển chuyển hướng mới trong kịch bản của tôi (không lập trình!) Và đặt nó vào được "Root View Controller" tới UIViewController thường xuyên và bổ sung thêm một nút trong nó mà says- chuyển tới bộ điều khiển xem tiếp theo (bộ điều khiển xem thứ hai này là một bộ điều khiển xem mà tôi muốn có một nút quay lại để liên kết với bộ điều khiển xem ban đầu). Bây giờ, bất cứ khi nào tôi cố gắng để liên kết các nút để quan điểm controller- tiếp theo "Pushing một bộ điều khiển chuyển hướng không được hỗ trợ".Đẩy một bộ điều khiển chuyển hướng không phải là biểu diễn supported- segues

giúp tôi xin vui lòng, và nhờ

EDIT: tôi vô tình subclassed UINavigationController, và không UIViewController trong lớp học của tôi. Cảm ơn bạn.

+0

xin vui lòng kiểm tra như sau https://github.com/cruffenach/Mobile-Tuts-Plus-UIStoryboard –

+0

trong ngắn hạn, xin vui lòng? –

+0

Vì vậy, bạn đã thay đổi 'RootiViewController' thành một' UIViewController'? – woz

Trả lời

10

Tôi đã thử điều này và không có vấn đề, nó tất cả được thực hiện trong IB không có mã bổ sung yêu cầu ...

  1. Bắt đầu một dự án mới, "Độc Xem Ứng dụng" sử dụng bảng câu chuyện
  2. Chọn bảng phân cảnh và xóa các chế độ xem được tạo ra.
  3. Kéo trên Navigation điều khiển mới (nó sẽ mang lại một cái nhìn bảng với nó)
  4. Xóa bảng và bộ điều khiển xem bảng, vì vậy bạn chỉ là trái với Navigation khiển
  5. Kéo trên một bộ điều khiển xem bình thường
  6. Nhấp chuột phải và kéo từ Trình điều khiển điều hướng đến Chế độ xem mới và chọn "Quan hệ - Bộ điều khiển chế độ xem gốc"
  7. Kéo "Mục nút thanh" vào thanh điều hướng sẽ hiển thị trên đầu ViewController của bạn. đổi tên này Chuyển tiếp nếu bạn muốn.
  8. Bây giờ kéo trên một bộ điều khiển xem đó là một nút "Forward" của bạn sẽ đẩy nhập để xem.
  9. Right Click và kéo từ nút thanh cho 2 View Controller, và chọn "Push"

Run dự án và bạn sẽ nhận được một cái nhìn đơn với một Navbar và nút bấm của bạn, nhấp nút của bạn sẽ Đẩy chế độ xem khác và cung cấp cho bạn Nút Quay lại để quay lại Trình điều khiển Chế độ xem đầu tiên. Tôi sẽ thử và đăng một hình ảnh của bảng phân cảnh của tôi nếu nó giúp.

PushViewControllers

Plasma

+0

Cảm ơn! khác (tiny) que-tôi có thể làm điều này "đẩy" programatically? Ý tôi là, tôi muốn làm một tuyên bố nếu - ví dụ, chỉ khi ứng dụng đã được ủy quyền cho trung tâm trò chơi. Làm thế nào tôi có thể làm điều đó? –

+0

BTW- cách của bạn ném cho tôi lỗi này: TwentyOneQuestions [37746: 1bb03] *** Chấm dứt ứng dụng do ngoại lệ uncaught 'NSInvalidArgumentException', lý do: 'Đẩy một điều khiển chuyển hướng không được hỗ trợ' *** Đầu tiên ném cuộc gọi ngăn xếp: (0x132f022 0x26e6cd6 0x38cf1b 0xb36452d 0x38ca24 0x6e8de6 0x6dd4d0 0x1330e99 0x2b514e 0x4f3a0e 0x1330e99 0x2b514e 0x2b50e6 0x35bade 0x35bfa7 0x35b266 0x2da3c0 0x2da5e6 0x2c0dc4 0x2b4634 0x18e9ef5 0x1303195 0x1267ff2 0x12668da 0x1265d84 0x1265c9b 0x18e87d8 0x18e888a 0x2b2626 0x296d 0x28d5) chấm dứt gọi là ném một ngoại lệ (LLĐB) –

+0

tôi chỉ có thể nghĩ rằng bạn có thể làm Có gì đó không đúng? Bạn đã chọn "bộ điều khiển chế độ xem" đơn giản cho 2 chế độ xem cuối cùng chứ không phải trình điều khiển Điều hướng. lên đến yhr điểm o nhấp chuột phải và kéo các khung nhìn nên là hình vuông màu trắng đơn giản không có gì trong chúng ngoài thanh trạng thái. Thanh điều hướng màu xanh dương được đặt tự động sau khi bạn kết nối các hộp. – Plasma

0

để trao đổi quan điểm Programatically bạn sẽ cần phải chọn segue và cung cấp cho nó một định danh như "PushView" sau đó gọi nó như thế này ....

[self performSegueWithIdentifier:@"PushView" sender:self]; 

Điều đó sẽ lập trình làm tương tự như cách nhấn vào nút chuyển tiếp. Tôi đã tạo cho bạn một dự án ví dụ với mã được thảo luận ở trên. Có một - (IBAction) với mã trong bạn có thể sử dụng để thay đổi chế độ xem theo chương trình.

PushView.zip

1

Tôi gặp sự cố tương tự. Tôi muốn có một bộ điều khiển chuyển hướng trên mỗi kịch bản, để mỗi có thể chạy độc lập, được sửa lỗi cá nhân, và do đó giao diện sẽ là đúng với thanh điều hướng.

Sử dụng các cách tiếp cận khác, tôi thấy UINavigationController sẽ được giữ lại từ bảng phân cảnh gốc - mà tôi không muốn - hoặc tôi gặp lỗi.

Sử dụng appdelegate trong điều khiển điểm của bạn để thiết lập rootViewController làm việc cho tôi (vay segue quy ước đặt tên từ Segue to another storyboard?):

- (void)showStartupNavigationController { 
NSLog(@"-- Loading storyboard --"); 

//Get the storyboard from the main bundle. 
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Startup" bundle:nil]; 
//The navigation controller, not the view controller, is marked as the initial scene. 
UINavigationController *theInitialViewController = [storyBoard instantiateInitialViewController]; 

NSLog(@"-- Loading storyboard -- Nav controller: %@", theInitialViewController); 

//Remove the current navigation controller. 
[self.navigationController.view removeFromSuperview]; 
UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window]; 
window.rootViewController = theInitialViewController; 
+0

Tôi có thể giúp bạn với điều này. Hãy xem xét http://stackoverflow.com/a/23403979/294884 và http://stackoverflow.com/a/23060746/294884 (nó luôn luôn khó để biết "chỉ là vấn đề/giải pháp" với ma sát 'storyboard-viewcontrollers- container! Nếu nó không liên quan đến nhu cầu của bạn ở đây, không có hại gì.) – Fattie

0

Tôi cũng muốn làm điều này, trình bày một màn hình (tức đã có một chuyển hướng nhúng điều khiển) khi người dùng nhấn một nút.

Trong lần thử đầu tiên, tôi đã kết nối segue từ nút trong màn hình nắm tay với Bộ điều khiển Điều hướng và ứng dụng bị lỗi với lỗi này "Đẩy bộ điều khiển điều hướng không được hỗ trợ".

Đây là giải pháp mà tôi đã tìm thấy:

Chọn khoảng cách từ nút trong màn hình đầu tiên đến bộ điều khiển điều hướng. Nếu có số nhận dạng, hãy sao chép tên của nó. Sau đó xóa phân đoạn đó.

Sau đó, tạo một khoảng cách mới bằng cách nhấn CTRL trong nút điều khiển xem đầu tiên và kéo đến bộ điều khiển VIEW BẠN MUỐN HIỆN TẠI (không phải với Trình điều khiển Điều hướng đang trỏ vào nó) và chọn Đẩy trong cửa sổ bật lên nhỏ.

Sau đó nhấp vào biểu tượng ở giữa khoảng cách và dán tên bạn đã sao chép trong bước đầu tiên làm số nhận dạng cho nó.

IB sẽ cung cấp cho bạn cảnh báo "Cảnh không thể truy cập được do thiếu điểm nhập cảnh và không có số nhận dạng để truy cập thời gian chạy qua -instantiateViewControllerWithIdentifier :." Đừng lo lắng, nó hoạt động hoàn hảo.

Nếu bạn muốn tùy chỉnh chuỗi được hiển thị như nút Back để quay lại, bạn có thể thêm dòng này trong phương pháp viewDidLoad của bộ điều khiển XEM đang được cho thấy sau khi nút được nhấn, đó là trẻ em xem bộ điều khiển.
(thay thế "Cài đặt" có tên mà bạn cần)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.topItem.title = @"Settings"; 
    ... 

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