J'ai examiné les RBStoryboardLink approche proposée par la Rhubarbe.
Cette mise en œuvre des substituts de vue du contrôleur de propriétés qui semble étrange. Je crois que j'ai trouvé la façon de l'éviter. Voici le projet de démonstration.
Les contrôleurs de la Navigation
Les contrôleurs de la Navigation pourriez tout simplement une vue référencée contrôleur en tant que racine. La mise en œuvre de ce point de vue contrôleur peut ressembler à ceci:
@interface ExternNavigationController : UINavigationController
@property (strong, nonatomic) NSString *storyboardName;
@property (strong, nonatomic) NSString *sceneIdentifier;
@end
@implementation ExternNavigationController
- (void)awakeFromNib
{
NSAssert(self.storyboardName, @"storyboardName is required");
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:self.storyboardName bundle:nil];
UIViewController *vc = self.sceneIdentifier
? [storyboard instantiateViewControllerWithIdentifier:self.sceneIdentifier]
: [storyboard instantiateInitialViewController];
self.viewControllers = @[vc];
}
@end
Afficher les contrôleurs
Les problèmes commencent lorsque vous souhaitez faire un view controller défini dans un storyboard. C'est le cas lorsque les propriétés sont copiés. Au lieu de cela, nous pouvons mettre en œuvre une coutume des enchaînements qui va remplacer par un faux contrôleur de destination avec un vrai externes dans le storyboard.
@interface ExternStoryboardSegue : UIStoryboardSegue
@end
@implementation ExternStoryboardSegue
- (id)initWithIdentifier:(NSString *)identifier source:(UIViewController *)source destination:(ExternViewController *)destination
{
NSAssert(destination.storyboardName, @"storyboardName is required");
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:destination.storyboardName bundle:nil];
UIViewController *vc = destination.sceneIdentifier
? [storyboard instantiateViewControllerWithIdentifier:destination.sceneIdentifier]
: [storyboard instantiateInitialViewController];
return [super initWithIdentifier:identifier source:source destination:vc];
}
- (void)perform
{
[[self.sourceViewController navigationController] pushViewController:self.destinationViewController animated:YES];
}
@end
ExternViewController est utilisé comme un espace réservé et contient requis pour la substitution des propriétés (storyboardName et sceneIdentifier).
@interface ExternViewController : UIViewController
@property (strong, nonatomic) NSString *storyboardName;
@property (strong, nonatomic) NSString *sceneIdentifier;
@end
@implementation ExternViewController
@end
Nous avons besoin de définir ces propriétés et la classe personnalisée pour l'espace réservé-vue-contrôleur. Et aussi le lien de vue-contrôleur avec ExternStoryboardSegue.
![IB screenshot]()