0

私のアプリには、同時にRootViewControllerである他のすべてのUIViewControllersに対して1つの親View Controller(MainViewController.h/m - UIViewController、NIBファイルなし)があります。

私のアプリは iOS 5 をサポートする必要があるため、AutoLayout はオフになっています。

いくつかのコードを階層化します。

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 など) から別の ChildViewController (HomeViewController など) に変更されます。

HomeViewController.m

- (IBAction)firstButton_click:(id)sender {

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

今問題について。

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:]で変換できません。私は何を間違えたのですか?バグですか?解決策はありますか?どんな助けでも大歓迎です。

4

2 に答える 2

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];
}
于 2013-04-11T09:38:12.717 に答える