Faire défiler un grand nombre d'images

2

Réponses

  • Je viens de tester c'est super merci !


     


    Quelle fonction je peux ajouter pour que lorsque que je swap vers la gauche il affiche le label precedent et quand je swap vers la droite le label suivant  ? 

  • Tu dois gérer un compteur de position. Exemple :



    import UIKit


    let listeQuestions = [
    "Quelle est la couleur du cheval blanc d'Henry IV ?",
    "Quelle est la recette secréte du Coca-Cola ?",
    "Un avion se crashe sur la frontière franco-suisse. Dans quel pays doit-on enterrer les survivants ?",
    "A quelle lignée John Snow appartient-il ?",
    "Qui a dis : Nul par la guerre ne devient grand ?"
    ]


    class ViewController: UIViewController {

    let label = UILabel()
    var questionCourante = 0

    override func viewDidLoad() {
    super.viewDidLoad()

    initialisationGestures()
    initialisationLabel()

    }

    func initialisationLabel() {
    label.frame = CGRect(x: 20, y: 0,
    width: self.view.bounds.width - 2*20,
    height: self.view.bounds.height*0.5)
    // Activation du mode multi-lignes
    // (Oui, c'est bizarre de l'activer avec la valeur 0)
    label.numberOfLines = 0
    label.textAlignment = .center
    self.view.addSubview(label)
    // Premiére question
    label.text = listeQuestions[questionCourante]
    }


    func initialisationGestures() {
    // Création de la gesture Swipe Droit
    let swipeDroit = UISwipeGestureRecognizer(
    target: self,
    action: #selector(self.actionSwipeDroit))
    // Direction à  détecter
    swipeDroit.direction = .right
    // On ajoute la gesture à  la vue principale
    self.view.addGestureRecognizer(swipeDroit)

    // Même chose pour la gauche
    let swipeGauche = UISwipeGestureRecognizer(
    target: self,
    action: #selector(self.actionSwipeGauche))
    swipeGauche.direction = .left
    self.view.addGestureRecognizer(swipeGauche)

    }

    // Question précédente (swipe droit)
    func actionSwipeDroit() {
    if questionCourante != 0 {
    questionCourante -= 1
    label.text = listeQuestions[questionCourante]
    }
    }

    // Question Suivante (swipe gauche)
    func actionSwipeGauche() {
    if questionCourante < listeQuestions.count-1 {
    questionCourante += 1
    label.text = listeQuestions[questionCourante]
    }

    }

    }

  • LarmeLarme Membre
    mai 2017 modifié #34

    J'essaye de toujours mettre le sender dans les méthodes gesture. ça permet de récupérer le sender (gesture dans notre cas), dans le cas où un jour on en ait besoin, cela évite de tout modifier à  droite à  gauche, quitte à  lui passer nil en paramètre si on l'appelle par code.


  • DrakenDraken Membre
    mai 2017 modifié #35

    Moi aussi. Mais comme JustStart est un novice, j'ai épuré le code, pour lui faciliter la compréhension.


  • merci j'ai Bien compris le code , mais ce n'est pas aussi simple haha . L'utilisateur peut supprimer ou ajouter des questions dans la tableview :)

  • T'as un exemple de questions, pour que je puisse voir  à  quoi cela ressemble ?



  • L'utilisateur peut supprimer ou ajouter des questions dans la tableview :)




    Tu commences à  marcher, et tu veux déjà  atteindre les étoiles ? Concentre-toi sur la réalisation d'un questionnaire simple. Il y a de quoi t'occuper un certain temps. Quand tu auras réalisé une application simple, mais fonctionnelle il sera temps de l'améliorer. Les tutos internet sont souvent des accumulations de "code magique", style "taper toutes ces lignes sans chercher à  comprendre et regarder les jolies couleurs. Je suis bon, hein ?". 

  • LarmeLarme Membre
    mai 2017 modifié #39

    Je plussois.


    Quand on débute, il vaut mieux faire des petits trucs qui marchent quitte à  les supprimer/tout remodifier ensuite pour ajouter d'autres features. Dans tous les cas, en théorie, tu t'exerces sur les concepts.


    Quand tu seras plus expérimenté, tu pourras les prévoir un peu d'avance, et développer des trucs "en dur" qui seront modifiés une fois que tu auras ajouté les autres fonctionnalités.


  • DrakenDraken Membre
    mai 2017 modifié #40

    Première question à  se poser : qu'est-ce qu'une question ? Il y a plusieurs possibilités, s'utilisant et se codant différemment.


     


    Choix A :


    Un texte et plusieurs réponses, dont seulement l'une est correcte. Exemple :


     


    "A quelle année a commencé la seconde guerre mondiale ?"


    "1870"


    "1939" (bonne réponse)


    "1941"


     


    Choix B:


    Un texte, des choix et plusieurs réponses possibles, style QCM d'évaluation scolaire. 


    "Quels peuples ont participé à  la la seconde guerre mondiale ? (plusieurs réponses possibles) "


    "Les français"      (bonne réponse)


    "Les américains" (bonne réponse)


    "Les bantous"      (mauvaise réponse)


     


     


    Choix C :


    Un texte et plusieurs réponses toutes correctes, genre analyse de profil de personnalité dans les magazines.


     


    "Quelle est la soirée idéale pour vous ?"


    "Sortir en boà®te"                                 (si cocher => +1 en festif)


    "Faire un bon repas avec des amis"  (si cocher => +1 en bon vivant)


    "Regarder un film avec Meg Ryan"    (si cocher => +1 en romantique)


    "Regarder un match de foot à  la tv"  (si cocher => +1 en sportif en pantoufle)


     


    Choix D:


    Un texte et une réponses à  taper sur le clavier (iOS ou reconstitué avec un système de label, comme tu sembles l'envisager plus haut dans ce topic).


     


    "Qui est l'actrice la plus romantique de tous les temps ?"


     


    Texte à  taper : "MEG RYAN"


     


    Bref, il y a le choix. Alors ta réponse ? A, B, C, D ou Autre (veillez préciser la nature de "autre")


  • JustStartJustStart Membre
    mai 2017 modifié #41

    Merci Draken j'apprécie beaucoup toutes les réponses que tu as apporté. 


     


    L'application comme je l'ai décrite précédemment fonctionne.


     


    Ignore l'idée qu'il y aura des questions . J'aimerais pouvoir naviguer d'une cellule à  l'autre sans devoir retourner sur la tableview  si possible, je pense que ça améliora l'expérience utilisateur et je n'ai trouvé aucun tuto traitant cette problématique haha


  • Joanna CarterJoanna Carter Membre, Modérateur

    Oui


  • JustStartJustStart Membre
    mai 2017 modifié #43

    Merci joanna , C'est compliqué à  coder ?

  • Joanna CarterJoanna Carter Membre, Modérateur

    Peut-être  8--)


  • JustStartJustStart Membre
    mai 2017 modifié #45

    tu veux combien ? lol 




  •  


    J'aimerais pouvoir naviguer d'une cellule à  l'autre sans devoir retourner sur la tableview  si possible, je pense que ça améliora l'expérience utilisateur et je n'ai trouvé aucun tuto traitant cette problématique haha




     


    Est-ce que tu as vraiment besoin de naviguer d'une cellule à  l'autre ? Je n'en suis pas certain. Je ne connais pas trop les TableView, mais je crois que tu as besoin de naviguer entre le contenu d'une cellule vers le contenu d'une autre cellule.


     


    Toutes les cellules sont identiques. C'est la position dans la liste qui définit le contenu. A un moment donné le délégué de la table demande à  l'application "voici la cellule n°23. Pouvez-vous me la remplir avec le contenu n°23 ? ".


     


    Pas besoin de sortir d'une tableView pour voir le contenu d'une cellule. Il suffit de scroller avec le doigt. Je présume donc que tu utilises la TableView comme une sorte de sommaire. Genre :


     


    "Question sur Napoléon"


    "Question sur Charles X"


    "Question sur Pépin le Bref"


    "Question sur Louis XIV"


    "Question sur Charlemagne"


     


    Et qu'en sélectionnant "Pépin le Bref", une vue s'affiche avec une image et le détail de la question. Une vue avec un bouton Retour pour revenir vers la tableView. 


     


    Ce que je ne comprend pas, et Joanna non plus manifestement, c'est pourquoi est-ce que tu ne dotes pas la "vue de lecture" d'un mécanisme de navigation sur les questions ? Des boutons "Question suivante" et "question précédente" ou des gestures et basta..


     


    Si la "vue de lecture" affiche la question n°23, elle peut aussi bien afficher le contenu de la question 24, après pression sur le bouton "question suivante" ou un swipe.

  • Joanna CarterJoanna Carter Membre, Modérateur

    De mon avis, ce que JustStart veut, c'est d'avoir deux vues alternatives sur les même données.


     


    Moi, je séparerait les données dans une classe singleton et je la utiliserait pour remplir les deux vues.


     


    Le classe des données devrait avoir une var pour garder l'index de article sélectionné ; il ne faudrait que changer l'index d'une viewController et de recharger l'autre vue.


  • JustStartJustStart Membre
    mai 2017 modifié #48
    1. Il y aura des fonctionnalités  que je devrai retirer  @Draken c'est à  peu près ça, mais ca n'a pas l'air simple, je vais la retirer pour l'instant . J'ai pour pourvoir enregistrer les datas, c'est le plus important, du faire de mes variables, un string lol .Résultat lorsque je passe les datas, ma formule ne marche plus 

       


      var labels = [Label]()


      dans mon VC je passais normalement la data grâce à  la formule : 


       


      Qlabel.text = label [myIndex]


       


      Maintenant j'ai le message d'erreur suivant


       


      cannot convert value of type 'String'to expected argument of type 'Label'


       


      Mon projet me tiens beaucoup à   coeur et ,j'espère  malgré mon niveau très bas le developer par  "  moi meme ". ce serait super si vous pouviez encore m'aidé sur ce coup la ! Merci et Bon weekend !


  • Un message d'erreur peut avoir de nombreuses raisons. Montre un peu ton code, si tu veux de l'aide.

  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2017 modifié #50


    var labels = [Label]()


    dans mon VC je passais normalement la data grâce à  la formule : 


     


    Qlabel.text = label [myIndex]


     


    Maintenant j'ai le message d'erreur suivant


     


    cannot convert value of type 'String'to expected argument of type 'Label'


     


    Mon projet me tiens beaucoup à   coeur et ,j'espère  malgré mon niveau très bas le developer par  "  moi meme ". ce serait super si vous pouviez encore m'aidé sur ce coup la ! Merci et Bon weekend !




     


    C'est évident.


     


    Ton var labels, c'est un Array de Label


     


    Mais tu accèdes label[myIndex] - ça aurait-dû être labels[myIndex] ?


     


    QLabel.text attend un String mais t'as demandé un Label de l'Array.


  • JustStartJustStart Membre
    mai 2017 modifié #51

    import UIKit

    class SecondViewController: UIViewController {
    @IBOutlet weak var input: UITextField!

    @IBAction func addItem(_ sender: Any) {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    let label = Label(context: context)

    label.name = input.text!

    //save data to core data
    (UIApplication.shared.delegate as! AppDelegate).saveContext()
    }


    import UIKit

    var labels : [Label] = []
    var myIndex = 0

    class TableViewController: UITableViewController {

    override func viewDidLoad() {
    super.viewDidLoad()

    //en tête navigation controler

    self.navigationItem.titleView = UIImageView(image : UIImage (named: "header_tableview"))
    self.navigationController?.hidesBarsOnSwipe = true

    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }
    // Va chercher les données

    override func viewWillAppear(_ animated: Bool) {
    getData()

    tableview.reloaddata

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source


    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    {
    // #warning Incomplete implementation, return the number of rows
    return labels.count

    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

    {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    let label = labels[indexPath.row]

    cell.textLabel?.text = label.name

    return cell
    }

    // fonction pour chercher les données

    func getData(){

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    do {

    labels = try context.fetch(Label.fetchRequest())

    }
    catch{

    print("Fetching Failed")

    }
    }





    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
    myIndex = indexPath.row
    performSegue(withIdentifier: "segue", sender: self)

    }

    override func viewDidAppear(_ animated: Bool)
    {
    tableView.reloadData()

    }
    }


    import UIKit


    class ViewController: UIViewController {


    @IBOutlet weak var QLabel: UILabel!


    override func viewDidLoad() {
    super.viewDidLoad()

    J'ai un problème pour transférer la data :

    QLabel.text = labels[myIndex] canot assign value of type 'Label' to type of 'string ?'
    QLabel.font = QLabel.font.withSize(288)
    QLabel.textColor = UIColor(red: 0 , green: 0, blue: 0, alpha: 1.0)


    }
  • Joanna CarterJoanna Carter Membre, Modérateur

    @JustStart - s'il te plaà®t utiliser les balises code


  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2017 modifié #53

    Pourquoi mettre les vars en dehors de la classe ?



    import UIKit

    var labels : [Label] = []
    var myIndex = 0

    class TableViewController: UITableViewController {

    Et, c'est quoi, le type Label ? Tu ne montres pas la définition.


  • Ca a surement un rapport avec l'entité Label que j'ai créé dans le fichier CoreData . 


  • Joanna CarterJoanna Carter Membre, Modérateur

    Je répète - pourquoi as-tu mis les vars en dehors de la classe?


  • DrakenDraken Membre
    mai 2017 modifié #56


    Ca a surement un rapport avec l'entité Label que j'ai créé dans le fichier CoreData . 




     


    Montre-nous ce que ton entité Label a dans le ventre .. Une entité CoreData n'est PAS un String, mais peut en contenir un (ou plusieurs).


     


    Il faut extraire le String de l'entité avant de l'écrire dans la propriété .text du Label.


     


    Et évite d'appeler ton entité Label, cela porte à  confusion avec l'UILabel. Question ou DataQuestion est plus approprié.

  • JustStartJustStart Membre
    mai 2017 modifié #57

    Très juste J'avais mis en dehors des classes pour  pour ajouter des datas depuis un autre VC avec le code suivant : 


     


      if (input.text != "")


                


            {


                


                caracters.append(input.text!)


                input.text = ""


            }


     


    mais je l'ai supprimé depuis


  • Joanna CarterJoanna Carter Membre, Modérateur
    mai 2017 modifié #58

    Encore une fois - s'il te plaà®t utiliser les balises code.


     


    ET le code dans ton dernier message a rien à  voir avec le problème


  • DrakenDraken Membre
    mai 2017 modifié #59

    Tu sais, JusteStart j'ai l'impression que ta pratique de swift consiste à  assembler des morceaux de tutos, sans comprendre les principes sous-jacents. Tous les autodidactes (à  commencer par moi) sont passés par là . A un moment, on se rend compte que développer une application c'est comme construire une maison. On a besoin de fondations solides pour bâtir quelque chose de sérieux.


     


    Tu ferais bien de suivre une petite formation sur Swift. je te recommande celle-ci :


     


    https://www.udemy.com/cours-complet-ios10-swift-3-creez-15-applications/


     


    Elle est actuellement en promotion à  10 €. Le rapport qualité/prix est excellent et c'est en français !


    Tu peux aussi suivre le MOOC (en rouge dans ma signature). C'est gratuit, mais incomplet. La seconde partie commence en Septembre. Et CoreData ne sera pas abordé. Alors que la formation de Sandy Ludosky traite de CoreData.


     


    La meilleure formation vidéo en français pour apprendre Swift est celle-ci :


     


    https://www.udemy.com/ios-10-et-swift-3-le-cours-complet/


     


    Mais elle est à  145 € pour le moment.. Et curieusement, ne traite pas de CoreData. Son  auteur a préféré parler d'un autre gestionnaire de données : Realm.io.

  • JustStartJustStart Membre
    mai 2017 modifié #60

    @Draken  Ca doit faire un peu plus de 3 semaines que je travaille sur ce projet quand j'ai le temps, j'essaye de créer une petite application qui répond à  un cahier des charges léger de manière à  que je puisse l'utiliser à  titre perso ou la faire essayer à  quelques amis.


     


    Il y a surement des fonctionnalités que je ne pourrais pas mettre en place (car pas de tutos haha), je vais regarder ça de près il y a 2-3 fonctionnalités auquel je pense et je connais Udemy, il y a vraiment des cours intéressants .


     


    Ensuite, dans la mesure ou je ne trouverai pas moi même, je me pose la question de faire appel éventuellement à  un développeur moyennant rétribution combien cela couterai par exemple pour la mise en place d'une fonctionnalité du type fonction de recherche de mots en sachant que ce n'est que quelques lignes de codes ? 


  • Tu sais, je ne suis pas un développeur, juste un amateur moyennement doué, avec des horaires à  géométrie variable, toujours en train d'apprendre. Je t'aide parce que cela m'aide aussi à  réfléchir sur des cas précis. Si tu veux un vrai professionnel, demande à  Joanna dont c'est le métier, et dont la maitrise technique est infiniment supérieur à  la mienne (en plus c'est une anglaise, elle lit les docs Apple en version native, alors que moi .. euh ..).

Connectez-vous ou Inscrivez-vous pour répondre.