207 votes

Création par programme d’une segue

J’ai un bon que tous mes étendre pour réutiliser certaines opérations courantes.

Je tiens à mettre en place une segue sur cette « Common » afin que tous les autres héritent.

J’ai essaye de figurer comment faire que par programme.

Je suppose que la question pourrait être également comment définir un pour tous mes sans entrer dans le story-board et de les faire à la main.

347voto

cocoanut Points 2396

J'ai pensé que je voudrais ajouter une autre possibilité. Une des choses que vous pouvez faire est de vous pouvez vous connecter dans deux scènes d'un scénario à l'aide d'une séquence qui n'est pas attaché à une action, puis par programme déclencher la séquence à l'intérieur de votre vue-contrôleur. La façon dont vous faites ce que vous avez à faire glisser à partir de la propriétaire du fichier de l'icône au bas de la table de montage séquentiel scène qui est la segueing scène, et en faisant glisser à droite de la scène de destination. Je vais le jeter dans une image pour aider à expliquer.

enter image description here

Une fenêtre s'afficher pour "Manuel de Transition". J'ai choisi de Pousser comme type. Appuyez sur la petite place et assurez-vous que vous êtes dans les attributs de l'inspecteur. Donner un identifiant qui vous servira de référence dans le code.

enter image description here

Ok, la prochaine je vais enchaîner à l'aide d'un programmatique bouton de la barre d'élément. Dans le viewDidLoad ou ailleurs je vais créer un bouton de l'élément sur la barre de navigation avec ce code:

UIBarButtonItem *buttonizeButton = [[UIBarButtonItem alloc] initWithTitle:@"Buttonize"
                                                                    style:UIBarButtonItemStyleDone
                                                                   target:self
                                                                   action:@selector(buttonizeButtonTap:)];
self.navigationItem.rightBarButtonItems = @[buttonizeButton];

Ok, notez que le sélecteur est buttonizeButtonTap:. Afin d'écrire une méthode void pour que le bouton et, dans cette méthode vous permettra d'appeler la séquence comme ceci:

-(void)buttonizeButtonTap:(id)sender{
    [self performSegueWithIdentifier:@"Associate" sender:sender];
    }

Le paramètre sender est nécessaire pour identifier le bouton lorsque prepareForSegue est appelé. prepareForSegue est la méthode du cadre où vous instanciez votre scène et de transmettre les valeurs qu'il aura besoin pour faire son travail. Voici ce que ma méthode ressemble à ceci:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"Associate"])
    {
        TranslationQuizAssociateVC *translationQuizAssociateVC = [segue destinationViewController];
        translationQuizAssociateVC.nodeID = self.nodeID; //--pass nodeID from ViewNodeViewController
        translationQuizAssociateVC.contentID = self.contentID;
        translationQuizAssociateVC.index = self.index;
        translationQuizAssociateVC.content = self.content;
    }
}

Ok, juste testé et il fonctionne. Espérons qu'il vous aide.

170voto

jonkroll Points 10400

Par définition, un segue ne peut pas vraiment exister indépendamment d'un storyboard. C'est même là, dans le nom de la classe: UIStoryboardSegue. Vous ne créez pas enchaîne par programme - c'est le storyboard d'exécution qui les crée pour vous. Vous pouvez normalement appel performSegueWithIdentifier: de votre point de vue du contrôleur de code, mais cela repose sur le fait d'avoir un segue déjà mis en place dans le scénario de référence.

Ce que je pense, vous vous demandez si c'est comment vous pouvez créer une méthode dans votre commune-vue-contrôleur (classe de base), qui sera la transition à un nouveau-vue-contrôleur, et sont héritées par toutes les classes dérivées. Vous pouvez faire cela en créant une méthode comme celle de votre classe de base-vue-contrôleur:

- (IBAction)pushMyNewViewController
{
    MyNewViewController *myNewVC = [[MyNewViewController alloc] init];

    // do any setup you need for myNewVC

    [self presentModalViewController:myNewVC animated:YES];
}

et puis dans votre classe dérivée, appelez la méthode lorsque le bouton est cliqué ou ligne du tableau est sélectionnée ou que ce soit.

82voto

Jean-Philippe Pellet Points 25240

Je me sers de ce code pour instancier ma coutume segue sous-classe et exécuter par programme. Il semble fonctionner. Rien de mal à cela ? Je suis perplexe, lire toutes les autres réponses disant que c’est impossible.

44voto

qrikko Points 999

Suppose que c'est répondu et accepté, mais j'aimerais juste ajouter un peu plus de détails.

Ce que j'ai fait pour résoudre un problème où je présente un login-vue comme premier écran, et puis il a voulu enchaîner à la demande si le login est correct. J'ai créé la séquence à partir de la connexion-vue-contrôleur à la vue de la racine de contrôleur et lui a donné un identifiant comme "myidentifier".

Puis, après vérification de tous les code de connexion si la connexion correcte je dirais

[self performSegueWithIdentifier: @"myidentifier" sender: self];

Mon plus gros malentendu ont été, que j'ai essayé de mettre la séquence sur un bouton et la nature de l'interruption de la séquence une fois qu'il a été trouvé.

32voto

Jeff Grimes Points 1494

Vous devez lier votre code à la que vous utilisez. Assurez-vous d’aller dans **YourViewController** dans votre , cliquez sur la bordure et définissez son champ à un que vous appelez dans votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X