1
iOS avec Swift
J. ROMAGNY
I.
BASES DU LANGAGE SWIFT ...................................................................................................................... 3
1.
VARIABLES ET CONSTANTES ............................................................................................................................... 5
Variables ......................................................................................................................................................... 5
Constantes ...................................................................................................................................................... 5
Optionals .................................................................................................................................................. 5
2. CONDITIONS .................................................................................................................................................. 6
3. BOUCLES ....................................................................................................................................................... 6
4. FONCTIONS .................................................................................................................................................... 6
5. COLLECTIONS ........................................................................................................................................... 7
a. Tableaux ................................................................................................................................................ 7
b. Dictionnaire ........................................................................................................................................... 8
c.
Tuple ................................................................................................................................................ 9
6. ENUM........................................................................................................................................................... 9
7. STRUCTURES .................................................................................................................................................. 9
8. OBJETS ....................................................................................................................................................... 10
a. Hritage ............................................................................................................................................... 10
b. Protocol................................................................................................................................................ 11
9. EXTENSION .................................................................................................................................................. 11
10.
GENERICS................................................................................................................................................ 11
I.
IOS ......................................................................................................................................................... 12
1.
2.
3.
INSTALLATION .............................................................................................................................................. 12
CREER UN NOUVEAU PROJET ........................................................................................................................... 13
VIEWCONTROLLER COTE STORYBOARD .................................................................................................. 18
a. Diffrents ViewControllers pouvant tre ajouts au Storyboard ................................................... 18
b. Segues (Navigation entre ViewControllers ) ............................................................................. 19
Segue ......................................................................................................................................................................... 20
Dfinir le ViewController initial ............................................................................................................................ 20
Ajouter la barre de navigation ................................................................................................................................... 21
Ajouter des boutons la barre de navigation (Bar Button Item) ............................................................................... 21
Navigation partir de cellule de TableViewController .............................................................................................. 22
c.
Amliorer lexprience utilisateur ........................................................................................................ 23
Assets ([Link]) ............................................................................................................................................ 23
LaunchScreen (* .xib) ................................................................................................................................................. 23
ImageView ................................................................................................................................................................. 24
Dfinir le background dune *View en code ........................................................................................................ 24
First Responder .......................................................................................................................................................... 25
Auto Layout................................................................................................................................................................ 26
4.
a.
b.
c.
VIEWCONTROLLER COTE CODE .................................................................................................................. 29
Ajout de la classe du ViewController .............................................................................................. 29
UIViewController ............................................................................................................................ 30
TableViewController Affichage de donnes sous forme de table .................................................. 31
Cellules avec titre et sous-titre .................................................................................................................................. 32
Plusieurs sections....................................................................................................................................................... 33
Disclosure................................................................................................................................................................... 34
Cellules avec images .................................................................................................................................................. 34
2
Custom Cell ................................................................................................................................................................ 35
Suppression de lignes ................................................................................................................................................ 36
d. Passage de donnes entre ViewControllers ( PrepareForSegue ) .................................................... 37
e. Cration dOutlets ................................................................................................................................ 38
f.
Cration dune Action .......................................................................................................................... 39
g. Activity Indicator .................................................................................................................................. 41
5. CREATION DE MODELE ET DE SERVICE ..................................................................................................................... 41
6. PERSISTANCE DE DONNEES ENTRE SESSIONS ............................................................................................................. 42
7. IPAD (TABLETTE) ................................................................................................................................................ 43
a. SplitView avec iPad .............................................................................................................................. 43
b. Popup ............................................................................................................................................. 44
I.
Bases du langage Swift
Pourquoi Swift ?
-
Swift se veut plus simple apprendre quObjective-CSans doute que ctait un frein
pour le dveloppement sur iOS. Dsormais (un peu comme en .NET) on peut choisir son
langage : Swift ou Objective-C.
Moderne
Productif
Quelques particularits :
-
Parenthses (conditions) et ; en fin dinstructions ne sont pas obligatoires
Attention aux espaces qui peuvent tre synonymes derreur de syntaxe
Encourage lutilisation de constantes (mot-cl let )
Pour tester Swift il est possible de crer un Playground (Ecran daccueil) ou menu File
New Playground
Documentation Swift
UIKit Reference
AppKit reference
Foundation framework reference
4
Aide depuis XCode
Maintenir la touche options ( gauche de la touche command )
En cliquant sur les liens on est
redirig vers la documentation
Quick Help Inspector : Menu View Utilities Show Quick Help Inspector
1. Variables et constantes
Variables
var myString : String = "Bonjour"
var myInt : Int = 10
var myDouble : Double = 9.99
var myBool : Bool = true
Ou
var myString = "Bonjour"
var myInt = 10
var myDouble = 9.99
var myBool = true
Afficher rapidement une sortie avec println
println(myString)
Formatage et concatnation
var name = "Jrme"
"Bonjour \(name)"
Concatnation
"Bonjour " + name
Conversion du type de donnes
Mthodes : Int(), Double(), Float(), etc.
String(myInt)
Constantes
let myConst = 100
Optionals
Ce sont en fait lquivalent des Nullables, cest--dire des variables pouvant accepter une valeur
nulle.
On ajoute ? au type
var myInt : Int?
if myInt != nil {
}
Tester si la variable est nulle
6
On pourrait ajouter les parenthses mais elles ne
sont pas ncessaires avec Swift
2. Conditions
if myInt > 10 {
} else if myInt == 10 {
}
else {
}
+ Utilisation de && et ||
Switch
switch myInt {
case 0 :
break
case 1...10 :
Oprateur range ici de 1 10
. Possible galement ..> et ..<
break
default :
break
}
3. Boucles
Parenthses pas obligatoires
while condition {
}
Boucle de 0 10
for index in 0...10{
println(index)
}
var fruits = ["Pomme","Poire","Pche"]
for fruit in fruits {
}
4. Fonctions
func myFunction (name : String) {
println(name)
}
myFunction("Jrme")
Avec retour
Nom du paramtre puis type
func myFunction (name : String) -> String{
return "Bonjour \(name)"
}
var result = myFunction("Jrme")
Type de retour
7
Paramtre avec valeur par dfaut
func calc (a : Int, b : Int = 10) -> Int{
return a + b
}
var res1 = calc (5)
var res2 = calc(5,b:20)
Forcer indiquer le nom des paramtres avec #
func myFunction (#name : String) {
println(name)
}
myFunction(name : "Jrme")
5. Collections
a. Tableaux
Crer un tableau
var fruits = [String]()
var fruits : [String] = []
Rempli linitialisation
var fruits = ["Pomme","Poire","Pche"]
Parcours des lments du tableau
for fruit in fruits {
}
Nombre dlments
println([Link])
Savoir le tableau est vide
if [Link] {
}
Ajout
[Link]("Banane")
.. Ou
fruits += ["Kiwi"]
8
Accs aux lments du tableau (lecture, modification)
println(fruits[0])
Suppression
[Link]()
[Link](0)
Tout supprimer
[Link](keepCapacity: false)
.. Ou tableau vide
fruits = []
b. Dictionnaire
Crer un dictionnaire vide
var myDictionary = [Int:String] ()
var myDictionary : [Int:String] = [:]
Dictionnaire rempli linitialisation
var myDictionary = ["key1" : "value 1", "key2" : "value 2"]
Parcours des lments
for (key,value) in myDictionary {
println("cl : \(key) et valeur : \(value)")
}
Savoir si le dictionnaire est vide
if [Link] {
}
Nombre dlments
println([Link])
Ajout ou modification si existante
myDictionnary[0] = "value 1"
Autre possibilit pour modification
[Link]("new value", forKey: 0)
9
Suppression
[Link](1)
Ou
myDictionary[1] = nil
Tout supprimer
[Link](keepCapacity: false)
Ou dictionnaire vide
myDictionary = [:]
c. Tuple
Ce sont des ensembles (groups entre parenthses). Tuple pour quintuple, sextuple par
exemple.
var name = "J. ROMAGNY"
var twitter = "@romagny13"
var myTuple = (name,twitter)
6. Enum
enum myEnum {
case One
case two
}
Utilisation
var useMyEnum : myEnum = [Link]
Ou
var useMyEnum = [Link]
Facilit dcriture, utile pour les switch galement
var useMyEnum : myEnum
useMyEnum = .One
7. Structures
struct User {
var name : String
var email : String
static func myFunc () {
}
Mthode statique dclare avec
static dans une structure
}
let marie = User(name: "Marie Bellin", email: "mb3@[Link]")
10
8. Objets
Classe
class User {
var name : String
var email : String
init() {
name = ""
email = ""
}
init(name : String, email : String) {
[Link] = name
[Link] = email
}
Variables initialiser soit dans le constructeur
soit la dclaration. Marquer les membres
private pour les rendre inaccessible en dehors
du fichier
Constructeurs. Accs aux
membres avec self
Destructeur
deinit {
}
func sayHello() -> String {
return ("Bonjour \(name)")
}
class func doSomething() -> String{
return ("...")
}
Mthode statique
accessible par le nom de la
classe
}
Proprit readonly
private(set) var email : String = ""
Cration dun objet
var marie : User = User()
..Ou
var marie = User()
Avec constructeur
var marie = User (name : "Marie Bellin", email : "mb3@[Link]")
Accs aux membres
var result = [Link]()
Pas dimport de headers faire avec Swift (se fait de manire transparente )
a. Hritage
Hrite de User
class Member : User {
override init() {
//
[Link]()
}
override func sayHello() -> String {
return ("Bonjour cher membre!")
}
}
Overrides du constrcuteur et dune mthode, accs aux
membres de la classe avec super
11
Utilisation. Ex
var alex = Member ()
[Link] = "Alex Prime"
var result = [Link]()
b. Protocol
Dfinit les membres que la classe devra implmenter
protocol UserProtocol {
var name : String { get }
var email : String { get set }
func sayHello()
}
class User : UserProtocol{
var name : String = ""
var email : String = ""
func sayHello() {
}
}
9. Extension
Exemple on cre une mthode dextension pour la classe User
extension User {
func sayBye() -> String{
return ("Aurevoir \(name)")
}
}
var marie = User ()
[Link] = "marie"
[Link]()
10. Generics
Un peu comme avec C#, on retrouve les Generics
Documentation
12
I.
iOS
1. Installation
Besoins :
-
Mac OS X (Maverick minimum) (ou cration dune image virtuelle avec VM Ware par
exemple)
XCode 6.* (free)
Aller sur lApp Store
, chercher xcode et linstaller
Sinscrire au Apple Developer Program pour pouvoir mettre ses applications sur lApp Store.
Ressources
13
2. Crer un nouveau projet
Depuis lcran de dmarrage ( Create a new XCode Project ) ou depuis le menu File
New .. Project
-
Single View Application reprsente lapplication de dpart de base.
Objective-C ou Swift
iPad, iPhone ou Universal
14
choix du rpertoire du projet
Le Storyboard permet de dfinir la structure et la navigation entre ViewControllers . Cest la
partie Visuelle .
Les ViewControllers utilisent leur classe de base correspondante par dfaut, si on veut ajouter son
code au ViewController il faut crer sa propre classe et remplacer la classe de base du
ViewController par celle-ci dans les proprits du Storyboard
15
Organisation du projet
Document Outline
du Storyboard
Dbug et choix du
device simul
Proprits de
llment
slectionn
Storyboard
Proprits de la slection
ViewController,
Segue
Proprits (apparence, etc.) de
llment slectionn
Connexions (Actions, outlets)
Quick help
File inspector
Tailles de
llment
slectionn
Boutons permettant
dafficher masquer les
diffrents panneaux et
splitter la vue
Boite outils ( Object
Library ) Elments pouvant
tre ajouts au Storyboard
16
Vues projet et Debug
Organisation du projet
Proprits du projet
Cycle de vie de lapplication
ViewControllers ayant besoin dune classe personnalise
Storyboard ( Visuel + segue )
Assets (images, AppIcon, etc.)
Ecran de dmarrage de lapplication
Boite outils ( Object Library ) : lments ajouter au Storyboard
Le bouton permet de basculer de la vue icones la vue liste
17
Proprits du projet
En cliquant sur la racine du projet on a accs aux proprits du projet (version, device,
launchscreen, capabilities, etc.)
iOS Simulator
Lorsque le simulator est lanc on a accs un menu permettant par exemple de zoomer, scale
(menu Window ). Le menu Hardware permet de changer la version mule, grer le
keyboard, etc.
Debug
On peut placer des points darrt
Delete Breakpoint
. Pour supprimer un point darrt clic droit dessus
Pas pas
Continuer
lexcution
Variables, objets
courants
Fentre de sortie On peut entrer la commande
po suivi de la variable ou lobjet obtenir
18
3. ViewController ct Storyboard
a. Diffrents ViewControllers pouvant tre ajouts au Storyboard
Reprables avec leur couleur jaune dans l Object Library
ViewController
View, TableView, ImageView, etc.
19
b. Segues (Navigation entre ViewControllers )
La navigation sajoute ainsi :
1. On maintient ctrl sur le contrle (bouton par exemple)
2. on glisse la souris vers le ViewController vers lequel naviguer.
Une flche avec un symbole est ajoute entre les 2 ViewControllers . Il est possible galement
de raliser cette opration depuis le panneau Document Outline
Segues
20
Segue
Show (e.g. Push), Show Detail (e.g. Replace)
Present Modally Options : Presentation (Full Screen, etc.), Transition (effet)
Present as Popover Options Directions (up, left, etc.), Anchor
(Les autres sont marqus Deprecated )
Dfinir le ViewController initial
La flche montre que cest lcran de
dpart de lapplication. Cocher is initial
View Controller dans les proprits
21
Ajouter la barre de navigation
Slectionner lcran initialpuis menu Editor Embed In Navigation Controller
Actuellement la barre naffichera quun bouton retour lorsque la navigation de retour sera
possible.
Ajouter des boutons la barre de navigation (Bar Button Item)
Ajout la barre de navigation
( Navigation Controller ). Puis
on change la proprit
Identifer (pour add ici) ce qui
change lapparence du bouton
Puis ajout de Segues glisser depuis le bouton vers le nouveau ViewController afficher
22
Navigation partir de cellule de TableViewController
Navigation ( Segues ) de Prototype Cell vers un autre ViewController
Element TableViewCell ajout par dfaut avec un
TableViewController mais pouvant tre ajout
depuis la boite outils ( Object Library )
Les 3 lments importants de la boite outils pour les TableViewControllers
23
TableViewController
TableViewCell
TableView
c. Amliorer lexprience utilisateur
UI guidelines
Assets ([Link])
- Il suffit de glisser dposer les images
- AppIcon : glisser une icne pour chaque emplacement selon les tailles
Retrouver et utiliser une image des assets :
var image = UIImage(named :"image_1" )
LaunchScreen (* .xib)
Personnalisable, on peut ajouter des lments, (exemple une ImageView en fond), la font
(couleur, famille, etc.)
24
ImageView
On peut facilement slectionner
limage affiche par l ImageView
parmis les assets
Dfinir le background dune *View en code
override func viewDidLoad() {
[Link]()
var imageView = UIImageView(image : UIImage(named:"image_3"))
[Link] = [Link]
[Link] = imageView
Image en fond et
Mode
}
override func viewDidAppear(animated: Bool) {
[Link](animated)
[Link]()
navigationController?.[Link] = 0.5
}
Transparence Barre
de navigation
25
Cellules pour UITableViewControllers
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:
NSIndexPath) -> UITableViewCell {
let cell = [Link]("personCell", forIndexPath:
indexPath) as CustomCell
let person = [Link]([Link])
[Link] = person
Cellules avec une cellule sur deux
[Link]?.text = [Link]
plus transparente que lautre
if([Link] % 2 == 0){
[Link] = [Link]()
}
else{
[Link] = [Link]().colorWithAlphaComponent(0.2)
[Link]?.backgroundColor =
[Link]().colorWithAlphaComponent(0.0)
}
return cell
}
First Responder
Faire perdre le focus un contrle. Exemple quand on valide (clic sur bouton) on fait prendre le
focus une boite de texte
Cacher le clavier quand on click en dehors
Si le clavier napparait pas avec le Simulator command + k (ou menu hardware du
Simulator )
26
Auto Layout
Un peu comme un site Web Responsive On dfinit des contraintes pour que les
lments restent positionns correctement selon les diffrentes rsolutions et orientations
de devices.
2 mthodes pour ajouter des contraintes : soit par le Ctrl + glisser de la souris soit depuis les
boutons de raccourcis en bas du Storyboard
Alignement
Tailles
Pour rsoudre les problmes de contraintes
Resizing
Les repres laisss peuvent avoir plusieurs couleurs :
-
Bleu : ok
Orange : avertissement, problme de contrainte
Rouge : erreur
On peut voir les contraintes ajoutes depuis le Document Outline
et leur dtail dans le panneau proprits
27
Centrer un lment
Par ex pour centrer horizontalement :
1. Ajouter une contrainte de taille (width)
Les traits permettent de dfinir une marge
fixe, ce que lon fait aussi par Ctrl + glisser
souris
Cliquer pour ajouter les contraintes
2. et une contrainte de marge (horizontal)
3. Et enfin contrainte par rapport au top. Maintenir Ctrl et glisser de la souris vers le top
choisir Top space to top layout guide )
Les traits sont bleus, tout
est ok. En cas de problme
ils pourraient tre orange
(avertissement) voir rouge
(erreur)
28
Ancrer un lment
Exemple un bouton en bas droite
1. Ajouter une contrainte de taille (vu comme prcdemment)
2. Ajouter une contrainte par rapport au bas (bottom). Toujours pareil maintenir Ctrl et
glisser depuis le contrle vers le bord. Choisir Bottom space to bottom layout guide
3. Ajouter une contrainte par rapport droite. Ctrl + glisser vers le bord droit et choisir
trailing space to container margin
Add missing Constraints cette option peut tre trs utile pour ajouter automatiquement
pour nous des contraintes. Par exemple on ajoute un label au centre de la vue, puis raccourci
bouton issues en bas du storyboard (ou menu Editor Resolve Auto Layout Issues ) et
Add missing constraints .
Pour tester utiliser le menu Hardware avec le Simulator : tourner ( rotate right ou
command + ) pour voir avec un changement dorientation (portrait/paysage) et essayer
sous plusieurs devices.
29
4. ViewController ct Code
a. Ajout de la classe du ViewController
Une classe de base est affecte au ViewController . Si toutefois on a besoin de personnaliser le
code il faut crer sa propre classe.
Classe par dfaut grise
Classe personnelle
Menu File New File (Ou depuis le dossier dsir clic droit New File )
30
Choix de la classe de base du ViewController
(UIViewController, UITableViewController, etc.)
Choix du ViewController dans les proprits du ViewController slectionn dans le
Storyboard
b. UIViewController
Cest un peu le ViewController de base tout faire.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
[Link]()
}
override func didReceiveMemoryWarning() {
[Link]()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before
navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using [Link].
// Pass the selected object to the new view controller.
}
*/
}
31
c. TableViewController Affichage de donnes sous forme de table
import UIKit
class TableViewController: UITableViewController {
let people = ["Marie", "Jerome"]
Exemple avec un
tableau
override func viewDidLoad() {
[Link]()
}
override func didReceiveMemoryWarning() {
[Link]()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
1 section
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) ->
Int {
return [Link]
Nb de lignes
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:
NSIndexPath) -> UITableViewCell {
let cell = [Link]("personCell", forIndexPath:
indexPath) as UITableViewCell
Identifier du TableViewCell
[Link]?.text = people[[Link]]
return cell
}
}
Ajouter un Identifier au TableViewCell
Elment affich pour chaque ligne
32
Cellules avec titre et sous-titre
1. Changer le style de TableViewCell
Le style est modifi
2. On dfinit la valeur du sous-titre ( detailTextLabel )
(On utilise ici un tableau de Tuples )
33
Plusieurs sections
1. Changer le nombre de sections
2. Cellule retourne selon la section
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:
NSIndexPath) -> UITableViewCell {
let cell = [Link]("cell", forIndexPath: indexPath)
as UITableViewCell
if [Link] == 0 {
let (name,twitter) = people[[Link]]
[Link]?.text = name
[Link]?.text = twitter
}
else{
let candy = candies[[Link]]
[Link]?.text = candy
}
return cell
}
3. Header de sections
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) ->
String? {
if section == 0 {
return "Contacts"
}
else{
return "Confiseries"
}
}
34
Headers de
sections
Disclosure
Avoir
droite des cellules
Rgler la proprit Accessory de TableViewCell
Dautres options sont possibles, par exemple avoir un texte details
Cellules avec images
On ajoute les images aux assets du projet, puis on utilise un tableau de tuples
let candies = [("Fraises Tagada","tagada"),("Crocodiles","croco"),("Fantaisie","fantasy")]
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:
NSIndexPath) -> UITableViewCell {
let cell = [Link]("cell", forIndexPath: indexPath)
as UITableViewCell
let (name,imageName) = candies[[Link]]
var image = UIImage(named: imageName)
[Link]?.text = name
[Link]?.image = image
return cell
}
On rcupre limage correspondante
au nom dans le tableau
35
Custom Cell
1. Crer une nouvelle classe hritant de UITableViewCell
Par exemple cette cellule de tableau
comportera un objet Person
2. Changer le type de la cellule TableViewCell du TableViewController allant lutilser
3. Utilisation dans le TableViewController
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath:
NSIndexPath) -> UITableViewCell {
let cell = [Link]("personCell", forIndexPath:
indexPath) as CustomCell
let person = [Link]([Link])
[Link] = person
[Link]?.text = [Link]
return cell
}
Et rcupration
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if([Link] == "table_to_details"){
let cell = sender as CustomCell
let destinationController = [Link] as
PersonDetailsViewController
[Link] = [Link]
}
}
36
Suppression de lignes
Swap
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle:
UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
[Link]([Link])
[Link]([indexPath], withRowAnimation: .Fade)
}else if editingStyle == .Insert {
}
}
Dcommenter ou
ajouter le code pour
prendre en charge
la suppression
On vrifie que cest bien la
navigation vers le
ViewController dsir,
37
puis on rcupre e
ViewController
d. Passage de donnes entre ViewControllers ( PrepareForSegue )
destination pour lequel on
renseigne la variable (dans
lexemple
nomme name )
Dans le ViewController metteur
avec la valeur de la cellule
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if([Link] == "table_to_details"){
let destinationController = [Link] as
PersonDetailsViewController
let cell = sender as UITableViewCell
[Link] = [Link]!.text
}
}
On slectionne le Segue entre
les 2 ViewControllers et lui
donne un identifier
Dans le ViewController rcepteur
class PersonDetailsViewController: UIViewController {
var name : String?
override func viewDidLoad() {
[Link]()
[Link] = name;
}
}
Variable remplie que lon
affiche dans la barre en titre
38
e. Cration dOutlets
1re Mthode
Exemple on cre deux Outlets correspondants deux labels devant afficher le dtail de la
personne (nom et email)
1. Utiliser la vue splitte
2. Se positionner sur le contrle (exemple ici un label) maintenir Ctrl
3. et faire glisser la souris vers lemplacement dans le code o sera insr celle-ci
on fait la mme chose pour le label affichant lemail
class PersonDetailsViewController: UIViewController {
var person : Person?
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var emailLabel: UILabel!
override func viewDidLoad() {
[Link]()
[Link] = "Dtails";
[Link] = person?.name
[Link] = person?.email
Utilisation des Outlets
pour remplir les labels
avec les donnes de la
personne
}
}
Avec cette mthode les labels du Storyboard sont automatiquement connects aux Outlets.
Panneau Proprits (onglet Connections Connector ) ou depuis le menu contextuel du
contrle
39
Attention toutefois, si on renomme ou supprime lOutlet dans le code, la connexion ne sera pas
supprime et peut tre source dexception. Ne pas oublier donc dans ce cas daller dans les
proprits des contrles depuis le Storyboard pour supprimer les connexions.
Note Avec Objective-C les Outlets sont places dans l@interface
2nde Mthode
1. Dfinir les Outlets en code
2. Aller ensuite dans le panneau de proprits (onglet Connections Connector ) des
contrles afin de les connecter.
f. Cration dune Action
1re
mthode
Pareil que pour les Outlets, en vue splitte maintenir Ctrl depuis le contrle dsir (ici un
bouton) et glisser jusqu lendroit o insrer laction dans le code.
Cette fois on slectionne Action
dans la boite de dialogue
40
2me mthode
En code puis on va dans les proprits (onglet Connections Connector ) ou depuis le menu
contextuel du contrle (bouton ici) afin de la connecter laction.
Affiche les lments connects. Si on supprime une connexion on ne supprime pas
le code du ViewController
Dans le code
Action non connecte (cercle vide)
Action connecte
41
g. Activity Indicator
1. Glisser depuis la boite outils sur le ViewController dsir
2. Proprits Hides When Stopped pour le cacher
3. Ajout dun Outlet au ViewController puis utilisation
5. Cration de modle et de service
Modle
import UIKit
class Person: NSObject {
var id : String?
var name : String?
var email : String?
override init (){
[Link]()
}
init (id: String ,name : String,email : String){
[Link] = id
[Link] = name
[Link] = email
}
}
42
Service
class PeopleService: NSObject {
struct people{
static var array =
[Person(id:NSUUID().UUIDString,name:"Marie",email:"mb3@[Link]"),Person(id:NSUUID
().UUIDString, name:"Jerome",email:"romagny13@[Link]")]
}
class func Count() -> Int{
return [Link]
}
class func GetOne(id :Int) -> Person{
if([Link]>0){
return [Link][id]
}
return Person()
}
class func Add(name : String, email : String) {
var person = Person(id:NSUUID().UUIDString,name: name, email: email)
[Link](person)
}
class func Remove(id :Int) {
[Link](id)
}
}
6. Persistance de donnes entre sessions
class ViewController: UIViewController {
@IBOutlet weak var output: UILabel!
@IBAction func Addvalue(sender: AnyObject) {
// add
var defaults = [Link]()
[Link]("ma valeur!", forKey: "mykey")
}
override func viewDidLoad() {
[Link]()
// load data
var defaults = [Link]()
var myvalue = [Link]("mykey") as? String
Enregistrement dune
valeur
On essaie de
retrouver la valeur
if myvalue != nil {
[Link] = myvalue
}
else {
[Link] = "Pas de valeur retrouve!"
}
}
La gestion du cycle de vie de lapplication est disponible depuis [Link]
43
7. iPad (tablette)
Options lorsque lon cre un nouveau projet ( iPad et Universal )
Avec le Simulator
a. SplitView avec iPad
Navigation Controller
du ViewController
master
SplitView
Navigation Controller
du ViewController
details
Details ViewController
Master ViewController
44
Les settings est un exemple de vue master dtails sur iPad
b. Popup
Sur iPad la popup peut ne pas occuper
toute la page comme sur iPhone
On a 2 ViewControllers , un ViewController initial avec un boutonpermettant
dafficher le second.
Le Segue est rgl sur Present Modally avec Presentation Form Sheet
45
Pour fermer la popup on ajoute un bouton ( Fermer ) avec une action