App maken: ook jij kunt het leren!

 

de iOS Academie Forums

Forums - App-ontwikkeling - Swift en iOS: IBOutlet collection

HesselHomme  Hessel Homme Riemersma heeft nog geen Studiekaart. Klokje07 dec 2014, 17:06
Avatar
Avatar
Berichten:8


Ik heb op mijn view drie knoppen gezet. Aan deze knoppen hangen drie (verschillende) IBActions. En nu probeer ik aan de hand van de orientatie van de View de drie knoppen te verbergen. Volgens mij dus een IBOutlet Collection. Bij het veranderen van de ro

@IBOutlet var knoppen: [UIButton]!

 

 Bij het veranderen van de orientatie heb ik de volgende code...

 

    override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {

        if UIInterfaceOrientationIsLandscape(toInterfaceOrientation) {

            for index in 0 ... knoppen.count - 1 {

               knoppen[index].hidden = true

            }

            

        } else {

            for index in 0 ... knoppen.count - 1 {

                knoppen[index].hidden = false

            }

        }

 

    }

 

De code lijkt redelijk te werken (1 knop heb ik kunnen koppelen aan de outlet en deze gaat ook weg als ik het scherm draai), maar ik krijg het niet voorelkaar om de overige knoppen ook te koppelen aan mijn Outlet Collection.

 

Heeft iemand een sugestie van wat ik fout doe? 

Reageer


Admin Roelf  Klokje08 dec 2014, 10:27
Avatar


HesselHomme,

Je zou dit inderdaad met een Outlet Collection kunnen doen (selecteer alle drie de knoppen, sleep ze naar het bronbestand van je class en kies vervolgens voor Outlet Collection), en vervolgens via de WillRotateToInterfaceOrientation-methode.

Maar.. dat is niet de goede manier. Sterker nog: methodes zoals WillRotateToInterfaceOrientation zijn verouderd en werken bij een volgende versie van iOS niet meer.

Voor de juiste oplossing heb je zelfs geen programmaregels nodig: gebruik Size Classes. Elke iPhone in landscape-modus heeft de verticale Size Class "compact". iPhones in portrait-modus hebben de verticale Size Class "Regular". Kortom: het enige dat je hoeft te doen is voor de drie buttons in te stellen dat ze alleen moeten worden getoond voor de Size Class "regular".

Ga als volgt te werk:

1. Selecteer alle drie de buttons tegelijk.

2. Ga naar de Attributes Inspector (of druk op Alt Cmd 4). Scroll helemaal naar beneden totdat je het aankruisvakje "Installed" ziet staan.

3. Zorg dat het vakje niet langer is aangekruist! De buttons verdwijnen nu van de view en worden, in de Outline, grijs. Je hebt nu aangegeven dat de buttons in principe niet moeten worden getoond.

Nu ga je opgeven dat de buttons alleen moeten worden getoond bij de (verticale) Size Class "regular":

4. Klik (in de Attributes Inspector) op het plusteken. Kies voor Any Width / Regular Height.

5. Er verschijnt weer een Installed-aankruisvakje. Kruis dit aan.

Size classes

Dat is alles! Je buttons worden nu getoond in portrait-modus en verdwijnen in landscape-modus. Zonder één regel programmacode.

Succes!

 

Reageer

Goed advies! 1 persoon vindt dit goed advies.

HesselHomme  Hessel Homme Riemersma heeft nog geen Studiekaart. Klokje08 dec 2014, 12:54
Avatar
Avatar
Berichten:8


Het is gelukt!!!

Top en dank voor de tip. Zijn er meer van deze "verouderde" functies en is er een overzicht tot wanneer een functie gebruikt kan worden?

Reageer


Admin Roelf  Klokje15 dec 2014, 20:12
Avatar


Ja, er zijn meer van dergelijke functies. In de documentatie (Xcode) zie je dan de tekst "deprecated" staan. Dat is het sein dat die functie of methode op termijn zal worden 'afgeserveerd'. Wanneer dat is, beslist Apple. Er is dan echter altijd een alternatief, dat duidelijk bij de "deprecated" functie wordt aangegeven. 

Reageer

Goed advies! 1 persoon vindt dit goed advies.