App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Swift en iOS: addSubView vanuit andere class

Cor  Cor heeft nog geen Studiekaart. Klokje11 mei 2015, 10:54
Avatar
Avatar
Berichten:44


Ik wil graag de data en methods die bij elkaar horen een beetje verzamelen in een aparte class. Dit is geen subclass van ViewController.

Vanuit deze class zou ik wel graag subviews kunnen toevoegen zoals dat vanuit de ViewController gebeurt met self.view.addSubView.

Weet iemand of dit kan of moet ik mijn class dan een subclass maken van ViewController?

Alvast bedankt.

Gr. Cor

 

Reageer


David  David heeft nog geen Studiekaart. Klokje11 mei 2015, 18:47
Avatar
Avatar
Berichten:95


je zou een UIView class kunnen maken (of dat dit een subclass of een protocol is weet ik niet)

 

 

 

 

klein voorbeeldje:

 

\

 

 

class ViewController: UIViewController {

    

    let mijndatacontroler = mijndata(frame: CGRectZero)

 

    override func viewDidLoad() {

        super.viewDidLoad()

        

    self.view.addSubview(mijndatacontroler)

        mijndatacontroler.voegsecondviewto()

     let a = mijndatacontroler.data1

    let b = mijndatacontroler.data2

    

    }

 

    

    

 

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

 

 

}

 

 

 

 

class mijndata: UIView{

      let secondview = UIView(frame: CGRectMake(10, 10, 20 , 20))

    

    override init(frame: CGRect) {

        super.init(frame: frame)

        self.frame = CGRectMake(0, 0, 100, 100)

        self.backgroundColor = UIColor.redColor()

        secondview.backgroundColor = UIColor.cyanColor()

        

    }

    

    required init(coder aDecoder: NSCoder) {

        fatalError("init(coder:) has not been implemented")

    }

    

    

    func voegsecondviewto() {

    self.addSubview(secondview)

    }

    func verwijdersecondview(){

    secondview.removeFromSuperview()

    

    }

    

    

    var data1 = ""

    var data2 = ""

    

    

}

Reageer


Cor  Cor heeft nog geen Studiekaart. Klokje11 mei 2015, 21:24
Avatar
Avatar
Berichten:44


Dank je David, Ik zal het eens gaan bestuderen...

Reageer


Admin Roelf  Klokje12 mei 2015, 12:42
Avatar


Ik wil graag de data en methods die bij elkaar horen een beetje verzamelen in een aparte class. Dit is geen subclass van ViewController.

Vanuit deze cl ...

Cor,

Ik weet niet precies wat je wilt gaan bouwen, maar een belangrijke tip: houd informatie gescheiden van weergave en gebruikersactiviteit: MVC. Kortom: maak geen (subclass van een) ViewController waarin dingen staan die eigenlijk met het "brein" van je app te maken hebben.

Als je iets duidelijker aangeeft om welk soort dingen het gaat die je in een class wilt zetten, kan ik je beter vertellen of je op de goede weg bent.

 

Reageer


Cor  Cor heeft nog geen Studiekaart. Klokje12 mei 2015, 13:09
Avatar
Avatar
Berichten:44


Hoi Roelf,

Ik heb een eerste app gemaakt en reeds goedkeuring ontvangen voor Apple’s TestFlight Program. De app wordt nu getest door een aantal externe testers.

Voor een volgende versie wil ik de app uitbreiden met meerdere levels. Hiervoor lijkt het me handig om een aantal zaken die betrekking hebben op het speelveld van mijn game (een matrix) in een aparte class onder te brengen, zodat ik dan gemakkelijker de matrixafmetingen kan schalen. Het onderbrengen van de matrix datastructuur en bijbehorende variabelen in een aparte class is niet zo het probleem. Maar als ik dan bij voorbeeld een method wil maken playingField.drawField() weet ik niet hoe ik om moet gaan met de addSubView aanroepen. Elk matrixelement is een subview. Hoe leg ik de koppeling van deze subViews met de hoofdview vanuit class playingField?  Dat is de kern van de vraag.

Wellicht heb jij een idee?

Groetjes,

Cor

 

Reageer


Admin Roelf  Klokje12 mei 2015, 15:08
Avatar


Cor, er zijn natuurlijk meer wegen die naar Rome leiden, maar... ik zou het als volgt oplossen.

Ik maak een PlayingFieldModel-class, waarin alles wordt bijgehouden wat te maken heeft met scores, players enzovoort. Deze class is dus het 'model' van de app.

Ik maak een PlayingFieldView-class; een subview van UIView, waarin alles wordt getekend en waarin gebruikersinteractie wordt herkend. Daar zit dus ook de drawField()-methode. Deze class is de 'view' van de app.

Ik maak een PlayingFieldController-class, een subclass van UIViewController, die (in ViewDidLoad) zowel het model als de view instantieert. Daarna zorgt de PlayingFieldController dat wijzigingen in het model worden doorgegeven aan de view (zodat ze kunnen worden getekend) en andersom (zodat gebruikersactie kan worden afgehandeld). Deze class is de 'controller' van de app.

Dit is dus een implementatie van M(model)V(iew)C(ontroller).

Kun je hier iets mee?

 

Reageer


Cor  Cor heeft nog geen Studiekaart. Klokje12 mei 2015, 20:52
Avatar
Avatar
Berichten:44


Roelf,

Dat is interessant. Heb ik jou daar niet eerder over horen vertellen in een van je videos?

Weet je nog welke dan kijk ik het even terug.

Gr Cor

Reageer