51 votes

Xcode 6 Storyboard Unwind Segue avec Swift non connecté pour quitter

Lorsque vous essayez de connecter une Barre de Navigation Bouton à la Sortie de l'élément de l'un ViewController dans Xcode 6 (pas vraiment sûr si c'est un Xcode 6 problème, mais vaut la peine de mentionner que c'est en version bêta) il ne trouve pas le Swift fonction de la classe personnalisée.

Button to Exit with whip

La fonction devrait être de trouver:

@IBAction func unwindToList(segue: UIStoryboardSegue) {

}

J'ai fait un autre bouton sur la vue juste pour faire sûr que je pourrais obtenir une IBAction de travail avec Swift et que j'étais à l'écrire correctement. Cela fonctionne très bien:

@IBAction func test(sender: AnyObject) {

    NSLog("Test")
}

J'ai vu cette question qui semble être le même problème mais selon les réponses, cela devrait fonctionner.

Xcode 6 bêta et, bien sûr, Swift est très nouveau, mais je voulais voir si quelqu'un a rencontré ce avant d'envisager un potentiel bug.

55voto

skabob11 Points 608

C'est un problème connu avec Xcode 6:

Détendez-vous enchaîner des actions déclarées dans Swift classes ne sont pas reconnus par Interface Builder

Pour vous déplacer, il vous suffit de:

  1. Variation class MyViewController de @objc(MyViewController) class MyViewController
  2. Créer un Objectif-C fichier d'en-tête avec une catégorie pour MyViewController que redeclares la séquence d'action.

    @interface MyViewController (Workaround)
    - (IBAction)unwindToMyViewController: (UIStoryboardSegue *)segue;
    @end
    
  3. Dans le scénario, sélectionnez l'instance de MyViewController, claire de sa classe personnalisée, puis retournez à la MyViewController.

Après ces étapes, vous êtes en mesure de connecter des boutons à la sortie de l'élément nouveau.

Xcode 6 Notes de Version PDF, Page 10

51voto

trumpeter201 Points 567

Au lieu d'utiliser la solution de contournement d'Objective-C, Xcode 6 Bêta 4, qui peut maintenant être installé, prend en charge la connexion des segments de déroulement dans le Générateur d'interface. Vous pouvez maintenant mettre à jour à partir du centre de développement iOS. Tout en maintenant la touche Contrôle enfoncée, faites glisser l'élément de l'interface utilisateur que vous souhaitez déclencher vers l'icône de sortie, puis sélectionnez la fonction unwindToSegue après avoir placé le code suivant dans le contrôleur de vue de destination.

 @IBAction func unwindToSegue (segue : UIStoryboardSegue) {}
 

16voto

rajeev Points 141

J'ai pu enfin le faire fonctionner; le xcode6 de l'IB est vraiment fragile en ce moment (se bloque beaucoup trop). J'ai dû redémarrer l'IDE avant que je ne puisse se connecter à la barre de navigation bouton de point à la sortie de l'élément. J'ai fini par re-création de mon projet de test et à la suite de la suggestion (Xcode 6 Notes de Version PDF, Page 10) pour qu'il fonctionne. En outre, lors de l'ajout de l' .h fichier, j'ai fait en sorte de choisir mon objectif du projet, qui a été désactivée par défaut. J'ai aussi créé mon contrôleur swift stub via le Cocoa Touch modèle de Classe (vs vide swift fichier). J'ai utilisé un modal segue dans mon nav contrôleur.

ListTableViewController.h

#import <UIKit/UIKit.h>

@interface ListTableViewController
- (IBAction)unwindToList: (UIStoryboardSegue *)segue;
@end

ListTableViewController.swift

import UIKit

@objc(ListTableViewController) class ListTableViewController: UITableViewController {

    @IBAction func unwindToList(s:UIStoryboardSegue) {
        println("hello world");
    }

}

espère que ça aide

11voto

Fred Points 311

Dans Xcode 6 Beta 4, qui est disponible au téléchargement, les séquences de déroulement et le constructeur d’interface sont pris en charge. Je l'ai testé par moi-même dans un petit projet.

1voto

Andreas Meyer Points 11

J'ai eu le même problème, également avec Xcode Beta 4 au début .. jusqu'à ce que j'ai découvert, que j'ai simplement oublié d'ajouter le @IBOutlet pour les boutons Annuler et Enregistrer dans le contrôleur respectif. Après cela, je pourrais connecter les boutons avec l'icône de sortie :))

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