2017-08-20 4 views
0

J'ai ViewController et il y a UIView dedans.exécuter segue à partir de UIView

Cet UIView a une classe myView séparée et il existe de nombreux éléments d'interface utilisateur - l'un d'entre eux est CollectionView. Ce que je veux, c'est effectuer un segue quand un des éléments de collection dans myView est sélectionné. Mais lorsque je tente d'ajouter la ligne

performSegue(withIdentifier: "myIdintifier", sender: self) 

à la vue de la collection méthode didSelectItemAt J'obtiens l'erreur

Utilisation d'identifiant sans solution « performSegue »

Et je comprends que cela est dû Je le fais en classe qui étend UIView et non UIViewController.

Alors, comment puis-je perfrom segue dans ce cas? Et aussi comment puis-je me préparer pour segue?

+0

vous pouvez utiliser un délégué personnalisé pour déclencher l'événement dans UIViewController et ensuite vous pouvez utiliser performSegue –

+0

pourriez-vous fournir un exemple plus détaillé en guise de réponse? – moonvader

Répondre

1

Ici, je vais l'évaluer étape par étape.

Étape - 1

Créer délégué personnalisé en utilisant le protocole comme ci-dessous extrait vous guidera sur votre UIView personnalisé. doit exister hors de votre étendue de vue personnalisée.

protocol CellTapped: class { 
    /// Method 
    func cellGotTapped(indexOfCell: Int) 
} 

Ne pas oublié de créer la variable de délégué de classe ci-dessus comme ci-dessous sur votre vue personnalisée

var delegate: CellTapped! 

Go avec votre point de vue méthode de collecte de didSelect comme ci-dessous

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     if(delegate != nil) { 
      self.delegate.cellGotTapped(indexOfCell: indexPath.item) 
     } 
    } 

Step - 2

Venons-en à votre vie w contrôleur. donnez le CellTapped à votre viewcontroller.

class ViewController: UIViewController,CellTapped { 

    @IBOutlet weak var myView: MyUIView! //Here is your custom view outlet 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     myView.delegate = self //Assign delegate to self 
    } 

    // Here you will get the event while you tapped the cell. inside it you can perform your performSegue method. 
    func cellGotTapped(indexOfCell: Int) { 
     print("Tapped cell is \(indexOfCell)") 
    } 
} 

Espérons que cela vous aidera.

+0

Merci! Impressionnant :) – moonvader

1

Vous pouvez utiliser des protocoles/délégués.

// At your CustomView 

protocol CustomViewProtocol { 
    // protocol definition goes here 
    func didClickBtn() 
} 


var delegate:CustomViewProtocol 




@IBAction func buttonClick(sender: UIButton) { 
    delegate.didClickBtn() 
    } 




//At your target Controller 
public class YourViewController: UIViewController,CustomViewProtocol 

let customView = CustomView() 
customView.delegate = self 

func didClickSubmit() { 
    // Perform your segue here 
} 
+0

Merci beaucoup! – moonvader