2016-07-24 5 views
1

Ich möchte einige UIKeyCommands in meiner App enthalten. Meine App besteht aus einem UISplitViewController, der den Master dazu zwingt, immer auf dem iPad im Vollbildmodus angezeigt zu werden. Auf einem kleineren Bildschirm funktioniert es wie es normalerweise wäre.UISplitviewController und verschiedene UIKeyCommands je nach Master, Detail oder beides auf dem Bildschirm

Nun habe ich einige UIKeyCommands in der MasterViewController und einige in der DetailViewController implementiert. Die App zeigt jedoch nur die in DetailViewController. Also habe ich alle von ihnen in die RootSplitViewController, aber das wird alle von ihnen zeigen, auch wenn die MasterViewController ist in iOS 9 Splitview versteckt.

Was ich will aber, ist es für alle zu zeigen, wenn die App Fullscreen auf dem iPad ist und somit die MasterViewController auf dem Bildschirm zusammen mit der DetailViewController gezwungen wird. Und wenn die Ansicht klein ist (z. B. 50-50) und die MasterViewController ausgeblendet ist, möchte ich nur die des Fensters auf dem Bildschirm anzeigen.

Irgendwelche Ideen, wie man das erreicht?

Antwort

1

Am Ende habe ich es geschafft - wenn auch nicht so schön.

Die UIKeyCommands werden zu RootSplitViewController hinzugefügt.

- (NSArray *)keyCommands { 
    if (self.view.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular) { 
     return @[ 
        [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierCommand action:@selector(changeRestaurant:) discoverabilityTitle:@"Change restaurant"], 
        [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeTable:) discoverabilityTitle:@"Change table"] 
       ]; 
    } else { 
     if (self.masterIsVisible == YES) { 
      return @[ 
         [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeRestaurant:) discoverabilityTitle:@"Change restaurant"] 
        ]; 
     } else { 
      return @[ 
         [UIKeyCommand keyCommandWithInput:@"t" modifierFlags:UIKeyModifierCommand action:@selector(changeTable:) discoverabilityTitle:@"Change table"] 
        ]; 
     } 
    } 
} 

Diese Methoden nennen die tatsächlichen Methoden in der spezifischen UIViewController.

- (void)changeRestaurant:(id)sender { 
    UINavigationController *nav = (UINavigationController *)[self.viewControllers objectAtIndex:0]; 
    RestaurantController *master = [nav.viewControllers objectAtIndex:0]; 
    [master changeRestaurant]; 
} 

- (void)changeTable:(id)sender { 
    UINavigationController *nav = (UINavigationController *)[self.viewControllers objectAtIndex:1]; 
    TableController *detail = [nav.viewControllers objectAtIndex:0]; 
    [detail changeTable:sender]; 
} 

Damit dies funktioniert ich eine BOOL zum UISplitViewController hinzugefügt.

@interface RootSplitViewController : UISplitViewController 

@property (nonatomic) BOOL masterIsVisible; 

@end 

Welches wird dann in der MasterViewController aufgerufen.

- (void)viewDidDisappear:(BOOL)animated { 
    RootSplitViewController *rootView = (RootSplitViewController *)self.splitViewController; 
    rootView.masterIsVisible = NO; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    RootSplitViewController *rootView = (RootSplitViewController *)self.splitViewController; 
    rootView.masterIsVisible = YES; 
} 

Ich weiß, dass dies nicht die Schönheiten Methode ist, aber es funktioniert. Wenn jemand einen besseren Weg kennt, würde ich gerne Ihre Rückmeldung hören.

Verwandte Themen