2017-06-14 2 views
-1

Im très nouveau à rapide, j'ai une application de page à onglets avec 5 contrôleurs de vue différents et 5 différents fichiers controller.swift de vue.Chaque contrôleur de vue a syntaxe similaire, mais quelques noms et étiquettes sont différent. Chaque contrôleur a une fonction qui va redémarrer mes valeurs de données et ils fonctionnent tous par page. mais ce que j'essaye de faire, est d'accéder aux fonctions claires de chaque contrôleur de vue en appuyant simplement sur un bouton d'un contrôleur de vue. Mon formatage/logique peut être complètement désactivé. Im enseigner moi-même de sorte que toute aide est appréciéeSwift: Appel des fonctions à partir de différents contrôleurs de vue

import UIKit 

class FirstViewController: UIViewController { 

// North wing 
var nTotal = 0 
var total = 0 
//Stepper Values 
@IBOutlet weak var tStepper: UIStepper! 
@IBOutlet weak var cStepper: UIStepper! 
@IBOutlet weak var ssStepper: UIStepper! 
@IBOutlet weak var sStepper: UIStepper! 

//-Tables 
@IBOutlet weak var Tables: UILabel! 
@IBAction func TCounter(_ sender: UIStepper) { 
    Tables.text = String(Int(sender.value)) 

} 

//-Carrels 
@IBOutlet weak var Carrels: UILabel! 
@IBAction func CCounter(_ sender: UIStepper) { 
    Carrels.text = String(Int(sender.value)) 
} 

//-Soft Seating 
@IBOutlet weak var SoftSeating: UILabel! 
@IBAction func SSCounter(_ sender: UIStepper) { 
    SoftSeating.text = String(Int(sender.value)) 
} 

//-Standing 
@IBOutlet weak var Standing: UILabel! 
@IBAction func SCounter(_ sender: UIStepper) { 
    Standing.text = String(Int(sender.value)) 
} 

//-Clear Pop-up 
@IBAction func Clear(_ sender: UIButton) { 
    let alert = UIAlertController(title: "Clear", message: "Clear all or current page?", preferredStyle: .alert) 

    let clearPage = UIAlertAction(title: "Clear Page", style: .default, handler: {ACTION in 

     self.nClear() 
    }) 
    let clearAll = UIAlertAction(title: "Clear All", style: .destructive, handler: {ACTION in 

     self.MasterClear() 
     }) 

    let Cancel = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

    alert.addAction(clearPage) 
    alert.addAction(clearAll) 
    alert.addAction(Cancel) 
    self.present(alert, animated: true, completion: nil) 

} 

Ceci est la fonction claire sur l'ensemble de mon point de vue des contrôleurs

//Clear Function 
func nClear() { 
    self.Tables.text = "0" 
    self.Carrels.text = "0" 
    self.SoftSeating.text = "0" 
    self.Standing.text = "0" 

    //Stepper Clear 
    self.tStepper.value = 0 
    self.cStepper.value = 0 
    self.ssStepper.value = 0 
    self.sStepper.value = 0 
} 

Ceci est la fonction que je veux être en mesure d'accéder à toutes les fonctions claires I ont sur chaque contrôleur

//Clear all Function 
func MasterClear(){ 

    self.nClear() 
    SecondViewController().iLClear() 
} 

mes pauses de code et application se bloque lorsque je lance et accéder à la fonction d'effacement maître

Répondre

0

Ce que vous voulez vraiment faire est de faire un modèle des données que vous souhaitez partager entre les différentes vues pour chacune de vos vues. Je vais faire un échantillon avec un. créer un fichier rapide pour votre modèle de données comme ceci:

class TestModel { 

    var Tables: String = "0" 
    var Carrels: String = "0" 
    var SoftSeating: String = "0" 
    var Standing: String = "0" 

    //Stepper Clear 
    var tStepper: Int = 0 
    var cStepper: Int = 0 
    var ssStepper: Int = 0 

    func modelReset() { 
    Tables = "0" 
    Carrels = "0" 
    SoftSeating = "0" 
    Standing = "0" 
    tStepper = 0 
    cStepper = 0 
    ssStepper = 0 

    } 


} 

suivant votre premier contrôleur ajouter une variable de vue qui est une instance du modèle

class FirstViewController: UIViewController { 
    var modelController: TestModel! 

et dans votre fonction viewDidLoad initialiser la

variables
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    modelController = TestModel() 

} 

créez votre propre fonction. J'ai appelé le mien reset:

@IBAction func reset(_ sender: Any) { 
    //Do for each ViewConrtoller 
    modelController.modelReset() 
} 

maintenant passer outre la préparation fonction d'envoyer les données au contrôleur de vue, nous allons

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let secondViewController = segue.destination as? SecondViewController { 
     secondViewController.modelController = modelController 
    } 
} 

maintenant dans votre deuxième contrôleur de vue créer une variable du modèle mais cette instance nous ne l'initialiserons pas dans la fonction viewDidLoad. Nous ne l'initialisons pas car nous le passons du premier contrôleur de vue dans notre fonction de préparation.

dans le second contrôleurs de vue fonction viewWillApear mettent à jour l'affichage avec les données du modèle

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    self.Tables.text = modelController.Tables 
    self.Carrels.text = modelController.Carrels 
    self.SoftSeating.text = modelController.SoftSeating 
    self.Standing.text = modelController.Standing 

    //Stepper Clear 
    self.tStepper.value = modelController.tStepper 
    self.cStepper.value = modelController.cStepper 
    self.ssStepper.value = modelConroller.ssStepper 
} 

une étape dernier ne pas oublier de mettre en œuvre la fonction se préparer à transmettre le modèle à la première unité de commande d'affichage dans Si vous l'avez mis à jour

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let secondViewController = segue.destination as? SecondViewController { 
     secondViewController.modelController = modelController 
    } 
} 
+0

Merci pour l'aide! J'ai essayé ceci cependant et je n'ai aucune chance. Rien n'est effacé sur le contrôleur de deuxième vue. Ai-je besoin de créer l'instance n'importe où spécifique dans la classe avec le maître clair? –

+0

mon mauvais vous devez obtenir l'instance qui est créée au lancement de l'application. Essayez ma mise à jour de la réponse – Steve

+0

Toujours rien .. Dois-je lier les fichiers viewcontroller.swift ensemble en quelque sorte? J'ai FirstViewController.swift et SecondViewController.swift.Merci pour votre aide je l'apprécie vraiment! –