2012-10-10 28 views
7

Đối với ứng dụng của tôi rootViewControllernavgationController.iOS 6 - (BOOL) shouldAutorotate không nhận được gọi cho bộ điều khiển điều hướng đẩy viewControllers

tôi thấy rằng đẩy điều khiển của

-(BOOL)shouldAutorotate là không nhận được gọi.

-(NSUInteger)supportedInterfaceOrientations chỉ được gọi một lần.

Tôi đã kiểm tra chính xác trong xcode's tóm tắt dự án (hoặc plist) cho tất cả các cửa sổ hỗ trợ định hướng.

Tôi muốn phương pháp này được gọi, vì có một số mã định vị uicontrol mà tôi muốn thực thi lập trình để thay đổi hướng.

tôi giải quyết vấn đề này bằng cách ghi đè (loại) phương pháp sau đây chuyển hướng điều khiển của

-(BOOL)shouldAutorotate; 

-(NSUInteger)supportedInterfaceOrientations; 

Tôi đã kiểm tra mà điều khiển được việc đẩy và theo đó được gọi là mã định vị uicontrol tương ứng điều khiển đẩy trong phương pháp sau đây Navigation controller của

(NSUInteger)supportedInterfaceOrientations; 

Điều này hoạt động tốt nhưng tôi không nghĩ đây là cách chính xác. Xin hãy giúp tôi để có giải pháp tốt hơn.

+0

Trong trường hợp của tôi (như tôi đã đăng http://stackoverflow.com/questions/12610132/multiple-uiinterfaceorientations-app-with-ios-6) tôi đã không thể để đối phó với presentModalViewControllers, nhưng pushViewController làm việc tốt – jMelnik

Trả lời

0

Bạn có thể kiểm tra sự định hướng giao diện qua

[UIApplication sharedApplication].statusBarOrientation 

khi bộ điều khiển xem được nạp, nói rằng, trong viewWillAppear. Ở đó bạn có thể làm bố trí của bạn của subviews. Khi xem xong, shouldAutorotate sẽ được gọi bất cứ khi nào thiết bị được bật.

+0

Nhưng tâm trí bạn đã hỗ trợInterfaceOrientations sẽ chỉ được gọi một lần –

+0

Không, xin lỗi. Tôi vừa thử nghiệm nó trên một dự án mới. Bất cứ khi nào tôi bật, cả hai phương pháp được gọi chính xác một lần. – Mundi

0

Ghi đè UINavigationController là cách tiếp cận đúng, nhưng tôi không chắc liệu bạn có đang kiểm tra bộ điều khiển đẩy được hỗ trợInterfaceOrientations đúng cách hay không.

Nhìn vào câu trả lời của tôi ở đây: https://stackoverflow.com/a/12669343/253008

+0

Không, tôi đang kiểm tra các bộ điều khiển đẩy được hỗ trợInterfaceOrientations đúng cách. Mọi thứ đều hoạt động chính xác như mong đợi. Tôi chỉ muốn biết là có bất kỳ thay thế khác cho giải pháp tôi tìm thấy (phương pháp ghi đè) để đẩy điều khiển - (BOOL) shouldAutorotate; - (NSUInteger) được hỗ trợInterfaceOrientations; sẽ được gọi tự động bất cứ khi nào định hướng thay đổi. Vì vậy, tôi có thể bỏ qua kiểm tra mà bộ điều khiển được đẩy và gọi mã UIControl reposition của nó cho phù hợp từ phương pháp overriden. Vì mã định vị lại UIControl này đã có sẵn trong các phương pháp định hướng của bộ điều khiển. –

27

Bạn có thể kiểm tra các liên kết sau đây, bạn cần phải tạo menu tùy chỉnh để hỗ trợ nên tự động xoay

http://mobileappdevpage.blogspot.in/2012/11/how-to-use-should-autorotateios-6-with.html

Một cách khác bạn có thể làm điều này bằng cách tạo danh mục của UINaviagationController

mã cho tệp .h là

@interface UINavigationController (autorotation) 

-(BOOL)shouldAutorotate; 
-(NSUInteger)supportedInterfaceOrientations; 

và mã cho tập tin .m là

@implementation UINavigationController (autorotation) 

-(BOOL)shouldAutorotate 
{ 

    UIInterfaceOrientation interfaceOrientation = [UIApplication sharedApplication].statusBarOrientation; 
    [self.topViewController shouldAutorotate]; 
    return YES; 

} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskAll; 

} 
@end 
+0

Nó rất hữu ích cho tôi. Cảm ơn yaar –

+0

tốt đẹp tôi cũng giải quyết vấn đề bằng cách sử dụng này cảm ơn ... –

+0

@iMobile và Neel cảm ơn –

1

Tôi cũng phải đối mặt với cùng một vấn đề với bộ điều khiển chuyển hướng.Nó hoạt động tốt trong trường hợp của tất cả các bộ điều khiển xem đẩy, nhưng kịch bản của tôi là hoàn toàn khác tôi đã có một viewController đẩy vào điều khiển chuyển hướng (ViewControllerParent) là gốc,

NavController 
      -- rootViewController (ViewControllerParent) 
              --- ViewControllerChild1 
              --- ViewControllerChild2 

Do một số yêu cầu dự án, tôi đã giữ ViewControllerParent làm cơ sở, và sau đó tôi đã thêm khung nhìn của Child viewcontroller dưới dạng subviews cho parent dựa trên hành động của người dùng. Bây giờ tôi đã có một kịch bản mà tôi muốn Child1 không để xoay và Child2 có luân phiên.

Vấn đề tôi phải đối mặt là [self.topViewController] trong lớp điều khiển điều hướng luôn trả về đối tượng cha mẹ vì tôi không đẩy Childs vào ngăn xếp điều hướng. Vì vậy, phương pháp shouldAutorotate của tôi trong Childs của tôi sẽ không bao giờ được gọi. Vì vậy, tôi đã phải đặt một lớp kiểm tra trong phương pháp shouldAutorotate của cha mẹ tôi và sau đó trả về giá trị luân phiên. tôi đã làm một cái gì đó như thế này trong lớp cha (ViewControllerParent), nó là một loại workaround nhưng nó cố định vấn đề này

-(BOOL)shouldAutorotate 
{ 
    BOOL allowRotation = YES; 

    if ([currentlyLoadedChild isKindOfClass:[Child1 class]]) 
    { 
     allowRotation = NO; 
    } 
    if ([currentlyLoadedChild isKindOfClass:[Child2 class]]) 
    { 
     allowRotation = YES; 
    } 
    return allowRotation; 
} 

-anoop

0

tôi đã cùng một vấn đề. hãy kiểm tra số this answer sự chấp thuận tuyệt vời của nó thay vì áp dụng ShouldAutoRotate

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