2011-07-09 35 views
11

rootViewController cửa sổ My là một UINavigationController Sau đó .. Trong rootViewController chuyển hướng này điều khiển, tôi bật lên một cái nhìn modal (một UITabBarController)Làm cách nào để loại bỏ cảnh báo "xoay vòng hai giai đoạn"?

một cái gì đó như thế này:

UIWindow 
->UINavigationController 
-->MyFirstViewController<--In this class I run following code 
[self.navigationController presentModalViewController:tabController animated:YES]; 

Sau đó cảnh báo debugger: Sử dụng hoạt ảnh xoay vòng hai giai đoạn không được hỗ trợ khi xoay nhiều bộ điều khiển chế độ xem hoặc xem bộ điều khiển không được ủy quyền cửa sổ

Tuy nhiên, nếu mod al xem không phải là tabController cảnh báo này không xuất hiện.

Hành vi này sẽ gây hại gì cho ứng dụng khi tôi bật chế độ xem phương thức tabController trong bộ điều khiển điều hướng?

Hoặc tôi nên tìm cách khác để thực hiện việc này?

Tôi tìm thấy một số câu hỏi tương tự trên trang web này, nhưng tôi không nhận được nó ...

+0

http://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation-controller-or-sharing-a-navigation-root - đây là một cách khác để thực hiện việc này. Không sử dụng bộ điều khiển, mà đúng hơn là tạo UIControllerView của riêng bạn và đính kèm một UITabBar vào nó. Liên kết có tham chiếu đến mã nguồn (nằm trên GIT). – TamusJRoyce

Trả lời

14

Lý do là bạn đang sử dụng một UITabBarController ngoài việc sử dụng dự định của nó. Nó chỉ dành cho việc sử dụng như một bộ điều khiển gốc, và bạn nên cần một cái gì đó tương tự như một thanh công cụ sử dụng thanh tabbar. Tôi đã gặp rắc rối với vấn đề chính xác khoảng nửa năm trước. Bạn cũng sẽ gặp phải các vấn đề khác nếu bạn sử dụng nó như vậy, thật không may.

UITabBarController documentation

Bởi vì lớp UITabBarController kế thừa từ lớp UIViewController, điều khiển thanh tab có điểm riêng của họ có thể truy cập thông qua quan điểm bất động sản. Khi triển khai giao diện thanh tab , bạn phải cài đặt chế độ xem này làm gốc của cửa sổ. Không giống như các bộ điều khiển chế độ xem khác, một giao diện thanh không bao giờ được được cài đặt dưới dạng con của một chế độ xem khác .

+0

câu trả lời tuyệt vời! Đã khắc phục sự cố của tôi. –

+0

Điều đó nói rằng tôi đã sử dụng một 'UITabBarController' bên trong một' UINavigationController' kể từ iOS 2 và không bao giờ có một vấn đề với điều đó. – Pascal

+3

Điều gì sẽ là cách thực hiện đúng màn hình đăng nhập và sau khi bạn đăng nhập vào UITabBarController? Ngoại trừ tin nhắn từ giao diện điều khiển trên ios7 tôi không thấy bất kỳ vấn đề khác của việc sử dụng bộ điều khiển bên trong một UINavigationController –

2

Tôi có ứng dụng ở đó UITabBarController là bộ điều khiển chế độ xem gốc. Tùy thuộc vào mua hàng trong ứng dụng, các trình điều khiển chế độ xem con khác nhau.

Trong NIB của tôi, tôi có UITabBarController mà không có bất kỳ bộ điều khiển chế độ xem con nào. Tôi đã thêm bộ điều khiển chế độ xem con trong application:didFinishLaunchingWithOptions:

Điều này làm cho cảnh báo "hai giai đoạn" cảnh báo xuất hiện. Ngay sau khi tôi thêm một bộ điều khiển xem con duy nhất cho bộ điều khiển thanh tab trong NIB nó biến mất.

12

này cũng sẽ xảy ra nếu bạn chỉ thêm một UITabBarController trống mà không cần bất kỳ điều khiển con, như vậy:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    //Tab bar controller 
    UITabBarController* tabBarController = [[UITabBarController alloc] init];  
    [[self window] setRootViewController:tabBarController]; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Cảnh báo sẽ biến mất nếu bạn thêm một điều khiển xem con đến UITabBarController trước khi tuyên bố nó là rootViewController của UIWindow của bạn.

+0

Nguyên nhân của điều này rất tốt. Vâng phát hiện! Tôi cố định như thế này: 'UIViewController * tempViewController = [[UIViewController alloc] init];' 'UINavigationController * tempNavController = [[UINavigationController alloc] initWithRootViewController: tempViewController];' 'self.tabBarViewController.viewControllers = @ [tempNavController]; ' Tôi không còn nhận được cảnh báo! Nhưng nó hơi lộn xộn một chút. – Sam

+0

+1 cho "Cảnh báo sẽ biến mất nếu bạn thêm bộ điều khiển xem con vào UITabBarController trước khi khai báo nó là rootViewController của UIWindow của bạn." – SolidSun

12

Tôi nhận được cảnh báo tương tự khi phân lớp UITabBarController nhưng quên gọi phương thức viewWillAppear: của lớp cơ sở trong lớp của riêng tôi.

- (void) viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated] // <--- adding this fixed the warning 

    ... 

} 
+2

+1 Cảm ơn - Tôi sẽ không bao giờ nghĩ đến điều đó gây ra cảnh báo này – anneblue

+0

cảm ơn. rất đơn giản, dễ bỏ qua. Và quả thực như là một sự kết luận, có thể đã khiến tôi mất nhiều thời gian để tìm ra điều đó. – Pega88

0

@Maciej Câu trả lời của Swic đã giúp tôi một chút.

Trong trường hợp của tôi, tôi đã có 2 con cho UITabBarController.

Vì một số lý do lạ, tất cả những gì tôi cần là đặt

[self.window makeKeyAndVisible];

sau khi tôi thêm 2 trẻ em.

0

Câu trả lời của Oliver đã thực hiện điều đó ... thật thú vị, mặc dù ... tôi đã không gặp bất kỳ vấn đề nào cho đến khi tôi thêm một viewWillAppear: phương thức động vào tabviewcontroller subclassed ... tại thời điểm đó, mọi thứ đi haywire, cho đến khi nó đã được cố định bằng cách thêm [siêu viewWillAppear: hoạt hình] tuyên bố Oliver gợi ý ...

0

vấn đề đã có cảnh báo hoạt hình hai giai đoạn với trình tự sau:

self.window.rootViewController = self.tabBarController; 
self.tabBarController.selectedIndex = 0; 

Nhưng thay đổi thứ tự giúp tôi loại bỏ cảnh báo.

self.tabBarController.selectedIndex = 0; 
self.window.rootViewController = self.tabBarController; 

Hy vọng điều này sẽ hữu ích.

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