2013-04-10 3 views
0

내 응용 프로그램에는 동시에 다른 RootViewController 인 다른 모든 UIViewController에 대해 하나의 부모보기 컨트롤러 (MainViewController.h/m - UIViewController, NIB 파일 없음)가 있습니다. 자동 레이아웃이 꺼져 있도록iOS의 컨테이너보기 컨트롤러를 올바르게 사용하는 방법

내 애플 .. 아이폰 OS에게

하이어 일부 코드 5를 지원해야합니다

AppDelegate.m에서를

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.mainViewController = [[MainViewController alloc] init]; 
    [self.window setRootViewController:self.mainViewController]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

MainViewController.m에서

- (void)viewDidLoad { 
    [super viewDidLoad]; 
// Do any additional setup after loading the view. 


    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 

     if ([[UIScreen mainScreen] bounds].size.height == 568) { 
      _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone5" bundle:nil]; 
     } else { 
      _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone" bundle:nil]; 
     } 
    } else { 
     _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; 
    } 


    [self addChildViewController:_homeViewController]; 
    [self.view addSubview:_homeViewController.view]; 
    [_homeViewController didMoveToParentViewController:self]; 
} 

- (void)changeFromViewController:(UIViewController*)fromViewController toViewController:(UIViewController*)toViewController withDuration:(NSNumber*)duration { 

    toViewController.view.frame = self.view.bounds; 
    [toViewController.view layoutIfNeeded]; 

    [self addChildViewController:toViewController]; 
    [self transitionFromViewController:fromViewController 
         toViewController:toViewController 
           duration:[duration floatValue] 
           options:UIViewAnimationOptionTransitionCrossDissolve 
          animations:nil 
          completion:^(BOOL finished) { 

           [toViewController didMoveToParentViewController:self]; 

           [fromViewController willMoveToParentViewController:nil]; 
           [fromViewController removeFromParentViewController]; 
          }]; 
} 

HomeViewController * .xib에는 7 개의 UIButton이 있습니다. 그들 중 하나가 만진 경우 MainViewController 클래스는 한 ChildViewController (HomeViewController 등)에서 다른 것으로 변경하기 위해 호출 중입니다. 이제 문제에 대한

- (IBAction)firstButton_click:(id)sender { 

    [(MainViewController *)self.parentViewController setAnimationForChangeFrom:self toStartTestSettingsViewControllerWithDuration:[NSNumber numberWithDouble:0.4] andWithDelay:[NSNumber numberWithDouble:0.1]]; 
} 

HomeViewController.m.

iOS 6 이상의 iPhone (장치 또는 시뮬레이터)에서 UIButtons는 몇 번의 터치만으로 반응합니다. 뷰의 하단에 배치 된 버튼은 더 많이 터치 한 다음 맨 위에 배치해야합니다. 여러 번 터치 한 후 이벤트가 시작되고보기가 변경되면이보기로 돌아올 때 모든 것이 정상적으로 작동합니다. 이 문제는 iPhone iOS 6.x에서만 발생합니다. iPhone iOS 5.x 및 iPad 5.x-6.x에서 정상적으로 작동합니다.

HomeViewController RootViewController를 만들면 물론 버튼이 이벤트에 응답합니다. 하지만 UIViewAnimationOptionTransitionCrossDissolve Animation [UIViewController transitionFromViewController : toViewController : duration : options : animations : completion :]으로 변환 할 수 없습니다.보기에는 동일한 부모보기 컨트롤러가 있어야하기 때문입니다. 내가 잘못 했어? 벌레 야? 어떤 해결책이 있습니까? 도움을 주시면 대단히 감사하겠습니다.

답변

0

문제는 [_homeViewController didMoveToParentViewController : self]; 때문에 발생했습니다. 그것은 불필요합니다.

MainViewController에있는 viewDidLoad가 있어야한다 : 이제 모든 작품

- (void)viewDidLoad { 
    [super viewDidLoad]; 
// Do any additional setup after loading the view. 


    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 

     if ([[UIScreen mainScreen] bounds].size.height == 568) { 
      _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone5" bundle:nil]; 
     } else { 
      _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone" bundle:nil]; 
     } 
    } else { 
     _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; 
    } 


    [self addChildViewController:_homeViewController]; 
    [self.view addSubview:_homeViewController.view]; 
} 

..

2

쓰기이 .PCH 파일에

#define IS_IPHONE_5 (fabs((double)[ [ UIScreen mainScreen ] bounds ].size.height - (double)568) < DBL_EPSILON) 


- (void)viewDidLoad { 
[super viewDidLoad]; 
// Do any additional setup after loading the view. 



if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 

    if (IS_IPHONE_5) { 
     _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone5" bundle:nil]; 
    } else { 
     _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController~iPhone" bundle:nil]; 
    } 
} else { 
    _homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; 
} 


[self addChildViewController:_homeViewController]; 
[self.view addSubview:_homeViewController.view]; 
} 
관련 문제