APERÇU - Je crée une application de carte mémoire. Je suis arrivé au point où l'utilisateur peut glisser à gauche et à droite à travers un tableau d'images. Les images sont divisées en 11 groupes différents et tous les groupes s'ajoutent à un tableau final que l'utilisateur peut balayer (code ci-dessous).UIswitch pour activer ou désactiver une matrice d'images dans le contrôleur de vue séparée
import UIKit
class SecondViewController: UIViewController , UIGestureRecognizerDelegate {
@IBAction func home(_ sender: Any) {
performSegue(withIdentifier: "home", sender: self)
}
@IBOutlet weak var imgPhoto: UIImageView!
struct List {
let words: [String]
var active: Bool
}
let list1 = List(words:["lake", "lamb", "lamp", "lark", "leaf", "leash", "left", "leg", "lime", "lion", "lips", "list", "lock", "log", "look", "love", "lunch"], active: true)
let list2 = List(words: ["ladder", "ladybug", "laughing", "lawnmower", "lemon", "leopard", "leprechaun", "letters", "licking", "lifesaver", "lifting", "lightbulb", "lightning", "listen", "llama"], active: true)
let list3 = List(words: ["alligator", "balance", "ballerina", "balloon", "bowling", "cello", "colors", "curlyhair", "dollar", "dolphin", "elephant", "eyelashes", "gasoline", "goalie", "hula", "jellyfish", "olive", "pillow", "pilot", "polarbear", "rollerskate", "ruler", "silly", "telephone", "television", "tulip", "umbrella", "valentine", "violin", "xylophone", "yellow"], active: true)
let list4 = List(words: ["apple", "ball", "bell", "bubble", "castle", "fall", "fishbowl", "girl", "owl", "pail", "peel", "pool", "smile", "whale", "wheel"], active: true)
let list5 = List(words: ["planet", "plank", "plant", "plate", "play", "plum", "plumber", "plus"], active: true)
let list6 = List(words: ["black", "blanket", "blender", "blocks", "blond", "blood", "blow", "blue"], active: true)
let list7 = List(words: ["flag", "flipflop", "float", "floor", "flower", "fluffy", "flute", "fly"], active: true)
let list8 = List(words: ["glacier", "glad", "glasses", "glide", "glitter", "globe", "glove", "glue"], active: true)
let list9 = List(words: ["clam", "clamp", "clap", "claw", "clean", "climb", "clip", "cloud"], active: true)
let list10 = List(words:["sled", "sleep", "sleeves", "slice", "slide", "slime", "slip", "slow"], active: true)
let list11 = List(words: ["belt", "cold", "dolphin", "elf", "golf", "melt", "milk", "shelf"], active: true)
var imageIndex: Int = 0
var imageList: [String] {
let wordLists = [list1, list2, list3, list4, list5, list6, list7, list8, list9, list10, list11]
let active = wordLists.reduce([]) { (result:[String], list:List) in
if list.active {
return result + list.words
} else {
return result
}
}
return active
}
override func viewDidLoad() {
super.viewDidLoad()
imgPhoto.image = UIImage(named: imageList[imageIndex])
// Do any additional setup after loading the view.
imgPhoto.isUserInteractionEnabled = true
let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
leftSwipe.cancelsTouchesInView = false
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(Swiped(gesture:)))
rightSwipe.cancelsTouchesInView = false
leftSwipe.direction = .left
rightSwipe.direction = .right
view.addGestureRecognizer(leftSwipe)
view.addGestureRecognizer(rightSwipe)
}
func Swiped(gesture: UIGestureRecognizer) {
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
case UISwipeGestureRecognizerDirection.right :
print("User swiped right")
// decrease index first
imageIndex -= 1
// check if index is in range
if imageIndex < 0 {
imageIndex = imageList.count - 1
}
imgPhoto.image = UIImage(named: imageList[imageIndex])
case UISwipeGestureRecognizerDirection.left:
print("User swiped Left")
// increase index first
imageIndex += 1
// check if index is in range
if imageIndex > imageList.count - 1 {
imageIndex = 0
}
imgPhoto.image = UIImage(named: imageList[imageIndex])
default:
break //stops the code/codes nothing.
}
}
}
}
MAINTENANT - Je travaille sur une page de paramètres (image ci-dessous). Il y a 1 commutateur pour chacune des 11 listes de mots dans le code ci-dessus. Le plus haut sommet interrupteur contrôlerait list1, le second interrupteur contrôlerait liste2 etc ...
Le problème - est que je veux ajouter des fonctionnalités à chaque commutateur. Lorsqu'un commutateur est en position d'arrêt, le groupe d'images auquel il est associé ne doit pas être inclus dans le tableau final et ne sera pas affiché lorsque l'utilisateur passera les flashcards. Le code de ma page de paramètres est maintenant ci-dessous. J'ai essayé d'expérimenter avec différents bits de code tels que la connexion du commutateur au ViewController et l'ajout d'une fonction Override mais je ne suis pas sûr de savoir où aller à ce stade.
import UIKit
protocol WordSelectionDelegate: class {
func wordSelected(newWord: Word)
}
class MasterViewController: UITableViewController {
var words = [Word]()
weak var delegate: WordSelectionDelegate?
override func prepare(for segue: UIStoryboardSegue, sender: SecondViewController) {
if let vc = segue.destination as? MasterViewController {
vc.wordLists = wordLists
}
}
@IBAction func switchAction(_ sender: UISwitch) {
wordList[sender.tag].active = rollIntoLoanSwitch.isOn
}
override func viewDidLoad() {
super.viewDidLoad()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.words.append(Word(name: "initial /l/ 1 syllable", description: "lake lamb lamp lark leaf leash left leg lime lion lips list lock log look love lunch"))
self.words.append(Word(name: "initial /l/ multisyllabic", description: ""))
self.words.append(Word(name: "intersyllabic /l/", description: ""))
self.words.append(Word(name: "final /l/", description: ""))
self.words.append(Word(name: "initial /pl/", description: ""))
self.words.append(Word(name: "initial /bl/", description: ""))
self.words.append(Word(name: "initial /fl/", description: ""))
self.words.append(Word(name: "initial /gl/", description: ""))
self.words.append(Word(name: "initial /kl/", description: ""))
self.words.append(Word(name: "initial /sl/", description: ""))
self.words.append(Word(name: "final /l/ clusters", description: ""))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return self.words.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// Configure the cell...
let word = self.words[indexPath.row]
cell.textLabel?.text = word.name
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt
indexPath: IndexPath) {
let selectedMonster = self.words[indexPath.row]
self.delegate?.wordSelected(newWord: selectedMonster)
if let Detail = self.delegate as? Detail {
splitViewController?.showDetailViewController(Detail, sender: nil)
}
}
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, can
Des idées sur la façon de résoudre ce problème seraient grandement appréciées. Merci
Je ne vois pas dans le code la cible délégué/action de l'UISwitch en cours de définition, vous devez le faire sinon la méthode 'switchAction' ne sera jamais appelée. L'avez-vous fait ailleurs dans votre code? Si vous mettez un point d'arrêt dans cette méthode, est-il jamais appelé? – Mrwerdo
Je suppose que je n'ai pas défini cela. La page des paramètres est un contrôleur de vue partagée, donc il y a d'autres classes qui sont liées à la vue fractionnée mais je n'ai pas mis la méthode d'action du commutateur dans d'autres classes autres que celles ci-dessus. –