Posts

Post not yet marked as solved
4 Replies
416 Views
When I logged into my cloudkit console to inspect the database for some debugging work I couldn't access the private database. It keeps saying "failed to access iCloud data, please signi n again". No matter how many times I sign in again, whether with password or passwordless key it keeps saying the same thing. It says that message when I click on Public database, and private and shared databases are below it. I only noticed this a couple of days ago. It's done this in the past, but I eventually got back into the database but I don't know what changed to make it work.
Posted Last updated
.
Post not yet marked as solved
1 Replies
383 Views
I have a couple of auto-renewable subscriptions in my app. The problem is that if I select £15.49 in my local currency (GBP), the foreign currency equivalents are exactly the same. For example, $15.49 for USD instead of $18.72. It is like this for all foreign currencies. I've tried searching to see if there's a button I need to press, but I found nothing.
Posted Last updated
.
Post not yet marked as solved
0 Replies
342 Views
I have the following methods called when I tap on the 'More' tab, which fetches my in-app purchase: override func viewWillAppear(_ animated: Bool) { reload()     loadDB()   } func reload() {     print("in reload in moreView!")     HyperpolyglotShopping.store.requestProducts{ [weak self] success, products in       print("success in reload in moreView is: \(success)")       guard let self = self else { return }       if success {         self.products = products!       }     }   } Once the in-app purchase product has been retrieved, a buy button is displayed (lines 35 - 47) in a table cell row if it hasn't already been bought. Like so: func tableView(_ moreTable: UITableView, cellForRowAt indexPath: IndexPath) - UITableViewCell {     var moreViewCell = UITableViewCell()           switch indexPath.section {     case 0:       let contactCell = moreTable.dequeueReusableCell(withIdentifier: contactReuseIdentifier, for: indexPath) as? ContactTableCell       contactCell?.imageContactCell?.image = UIImage(named: contactRowIcons[indexPath.row])       contactCell?.labelContactCell?.text = contactRowOptions[indexPath.row]       moreViewCell = contactCell!     case 1:       let settingsCell = moreTable.dequeueReusableCell(withIdentifier: settingsReuseIdentifier, for: indexPath) as? SettingsTableCell       settingsCell?.delegate = self       settingsCell?.indexPath = indexPath       settingsCell?.labelSettingsCell?.text = settingsRowOptions[indexPath.row]       settingsCell?.imageSettingsCell?.image = UIImage(named: settingsRowOptionIcons[indexPath.row])       settingsCell?.buttonSettingsCell?.setTitle(settingsRowOptionButtons[indexPath.row], for: .normal)       switch settingsCell?.indexPath.row {       case 0:         if languages?.count ?? 0 == 0 {           settingsCell?.buttonSettingsCell?.isEnabled = false         } else {           settingsCell?.buttonSettingsCell?.isEnabled = true         }       case 1:         let wordsWithTestScores = words?.filter { $0.languageCorrectAnswers 0 || $0.homeworkCorrectAnswers 0 || $0.bonusCorrectAnswers 0 }         if wordsWithTestScores?.count == 0 {           settingsCell?.buttonSettingsCell?.isEnabled = false         } else {           settingsCell?.buttonSettingsCell?.isEnabled = true         }       default:         break       }       moreViewCell = settingsCell!     case 2:       let purchaseCell = moreTable.dequeueReusableCell(withIdentifier: purchaseReuseIdentifier, for: indexPath) as? ProductTableCell       print("products in tableView(_cellForRowAt) in moreView are: \(products)")       let product = products[indexPath.row]       purchaseCell?.product = product       purchaseCell?.buyButtonHandler = { product in         HyperpolyglotShopping.store.buyProduct(product)       }       moreViewCell = purchaseCell!     default:       break     }     return moreViewCell   } Sometimes the products array contains the in-app purchase and everything's fine. Most of the time the reload method never gets beyond line 7. The products array is then accessed by the table method and finds a nill value, and crashes.
Posted Last updated
.
Post not yet marked as solved
5 Replies
2.5k Views
I have a class called TestViewController which asks user for the english translation of a foreign word. User taps on a UITextField which brings up the keyboard, and user types in their answer. The answer is checked after user taps the return key. My problem is that the keyboard is dismised each time the return key is tapped and answer is checked. User has to tap inside UITextField each time they want to submit the next answer. My question is, how to keep the keyboard present at all times.I've tried commenting out line 75, which keeps keyboard up all the time, but the users answer doesn't get checked so they can move on to the next question.import UIKit import AVFoundation class TestViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var stackView: UIStackView! @IBOutlet weak var prompt: UILabel! @IBOutlet weak var synthesizeButton: UIButton! @IBOutlet weak var instructions: UILabel! @IBOutlet weak var englishAnswer: UITextField! var words = [String]() var testWords = [String]() var useHomework: Bool! var zeroTimesWrong: Int! var homeworkZeroTimesWrong: Int! var questionCounter = 0 var showingQuestion = true var chosenLanguage = String() var language = String() let wordsString = "Words" var englishWord = String() var foreignWord = String() var attempted = Int() var homeworkAttempted = Int() var homework = Int() override func viewDidLoad() { super.viewDidLoad() print("viewDidLoad questionCounter is: \(questionCounter)") print("useHomework in viewDidLoad in TestViewController is: \(useHomework!)") loadChosenLanguage() loadWords() print("testWords just before shuffle: \(testWords)") testWords.shuffle() print("testWords just after shuffle: \(testWords)") if useHomework == true { navigationItem.title = "Learn Homework" } else { navigationItem.title = "Learn \(chosenLanguage.capitalized)" } navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Reveal Answer", style: .plain , target: self, action: #selector(answerTapped)) stackView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8) stackView.alpha = 0 synthesizeButton.isEnabled = false synthesizeButton.alpha = 0.25 englishAnswer.delegate = self englishAnswer.layer.cornerRadius = 0.05 * englishAnswer.bounds.size.width let placeholderColor = UIColor.systemGray englishAnswer.attributedPlaceholder = NSAttributedString(string: "Tap here to answer", attributes: [NSAttributedString.Key.foregroundColor : placeholderColor]) askQuestion() instructions.isHidden = true } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //loadWords() //print("testWords just before shuffle: \(testWords)") //testWords.shuffle() //print("testWords just after shuffle: \(testWords)") //print("questionCounter in viewWillAppear in TestViewController is: \(questionCounter)") englishAnswer.delegate = self englishAnswer.returnKeyType = .done } func textFieldShouldReturn(_ englishAnswer: UITextField) -> Bool { englishAnswer.resignFirstResponder() return true } @IBAction func synthesizeButton(_ sender: UIButton) { let utterance = AVSpeechUtterance(string: testWords[questionCounter].components(separatedBy: "::")[0]) utterance.voice = AVSpeechSynthesisVoice(language: "en-US") utterance.rate = 0.5 let synthesizer = AVSpeechSynthesizer() synthesizer.speak(utterance) } @IBAction func englishAnswer(_ sender: UITextField) { print("Entered englishAnswer") let trimmed = sender.text?.trimmingCharacters(in: .whitespacesAndNewlines) print("trimmed?capitalized in englishAnswer in TestViewController is: \(trimmed?.capitalized ?? "")") if trimmed?.capitalized == testWords[questionCounter].components(separatedBy: "::")[0] { resetWordCounters() if questionCounter + 1 < testWords.count { questionCounter += 1 } else { questionCounter = 0 } prompt.textColor = UIColor(red: 0, green: 0.7, blue: 0, alpha: 1) DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { self.prepareForNextQuestion() } } else { appendPracticeWord() prompt.textColor = UIColor(red: 0.7, green: 0, blue: 0, alpha: 1) synthesizeButton.isEnabled = true synthesizeButton.alpha = 1 instructions.isHidden = false } englishAnswer.text?.removeAll() englishAnswer.placeholder = nil englishAnswer.isEnabled = false englishAnswer.layer.borderColor = UIColor.lightGray.cgColor as CGColor } func loadChosenLanguage() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { if let savedChosenLanguage = defaults.object(forKey: "languageChosen") as? String { print("savedChosen Language in loadChosenLanguage in TestViewController is: \(savedChosenLanguage)") chosenLanguage = savedChosenLanguage } } } func loadWords() { print("in loadWords in TestViewController") if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { print("after defaults in loadWords in TestViewController") if var savedWords = defaults.object(forKey: "words") as? [String] { words.removeAll() testWords.removeAll() words = savedWords print("savedWords in loadWords in TestViewcontroller are: \(savedWords)") print("words in loadWords in TestViewController are: \(words)") for savedWord in savedWords { let split = savedWord.components(separatedBy: "::") if useHomework == false { if split[7] == chosenLanguage { testWords.append(savedWord) print("testWords.append from chosenLanguage in loadWords in TestViewController are: \(testWords)") } } else { if split[6] == "1" { testWords.append(savedWord) print("testWords.append from homework in loadWords in TestViewController are: \(testWords)") } } } savedWords.removeAll() } } } override func viewDidLayoutSubviews() { //configureButtons() } func configureButtons() { synthesizeButton.layer.cornerRadius = 0.5 * synthesizeButton.bounds.size.width synthesizeButton.layer.borderColor = UIColor.lightGray.cgColor as CGColor synthesizeButton.layer.borderWidth = 4.0 synthesizeButton.clipsToBounds = true } func resetWordCounters() { print("questionCounter in resetWordCounters in TestViewController is: \(questionCounter)") let resetCountersWord = testWords[questionCounter].components(separatedBy: "::")[1] print("resetCountersWord in resetWordCounters in TestViewController is: \(resetCountersWord)") if useHomework == false { attempted += 1 } else { homeworkAttempted += 1 } if useHomework == false { zeroTimesWrong = 0 } else { homeworkZeroTimesWrong = 0 } var indexForTestWord = 0 for testWord in testWords { if testWord.components(separatedBy: "::")[1] == resetCountersWord { print("testWord equals resetCountersWord: \(resetCountersWord)") let split = testWord.components(separatedBy: "::") let firstWord = split[0] let secondWord = split[1] testWords.remove(at: indexForTestWord) print("testWords.remove in resetWordCounters in TestViewController are: \(testWords)") testWords.insert("\(firstWord)"+"::"+"\(secondWord)"+"::"+"\(zeroTimesWrong!)"+"::"+"\(homeworkZeroTimesWrong!)"+"::"+"\(attempted)"+"::"+"\(homeworkAttempted)"+"::"+"\(homework)"+"::"+"\(language)", at: indexForTestWord) print("testWords.insert in resetWordCounters in TestViewController: \(testWords)") break } indexForTestWord += 1 } print("indexForTestWord in resetWordCounters in TestViewController is: \(indexForTestWord)") removeInsertWord(resetCountersWordPracticeWord: resetCountersWord) } func appendPracticeWord() { zeroTimesWrong += 1 homeworkZeroTimesWrong += 1 if useHomework == false { attempted += 1 } else { homeworkAttempted += 1 } print("questionCounter in appendPracticeWord in TestViewController is: \(questionCounter)") let practiceWord = testWords[questionCounter].components(separatedBy: "::")[1] print("practiceWord in appendPracticeWord in TestViewController is: \(practiceWord)") var indexForPracticeWord = 0 for testWord in testWords { if testWord.components(separatedBy: "::")[1] == practiceWord { print("testWord equals practiceWord: \(practiceWord)") let split = testWord.components(separatedBy: "::") let firstWord = split[0] let secondWord = split[1] testWords.insert("\(firstWord)"+"::"+"\(secondWord)"+"::"+"\(zeroTimesWrong!)"+"::"+"\(homeworkZeroTimesWrong!)"+"::"+"\(attempted)"+"::"+"\(homeworkAttempted)"+"::"+"\(homework)"+"::"+"\(language)", at: indexForPracticeWord) print("testWords.insert in appendPracticeWord in TestViewController: \(testWords)") break } indexForPracticeWord += 1 } print("indexForPracticeWord in appendPracticeWord in TestViewController is: \(indexForPracticeWord)") testWords.remove(at: indexForPracticeWord) print("testWords.remove in appendPracticeWord in TestViewController: \(testWords)") removeInsertWord(resetCountersWordPracticeWord: practiceWord) } func removeInsertWord(resetCountersWordPracticeWord: String) { var indexForWord = 0 for word in words { if word.components(separatedBy: "::")[1] == resetCountersWordPracticeWord { print("word equals resetCountersWordPracticeWord: \(word)") let split = word.components(separatedBy: "::") let firstWord = split[0] let secondWord = split[1] words.remove(at: indexForWord) print("words.remove in removeInsertWord in TestViewController are: \(words)") words.insert("\(firstWord)"+"::"+"\(secondWord)"+"::"+"\(zeroTimesWrong!)"+"::"+"\(homeworkZeroTimesWrong!)"+"::"+"\(attempted)"+"::"+"\(homeworkAttempted)"+"::"+"\(homework)"+"::"+"\(language)", at: indexForWord) print("words.insert in removeInsertWord in TestViewController after insert: \(words)") break } indexForWord += 1 } print("indexForWord in removeInsertWord in TestViewController is: \(indexForWord)") saveWords() } @objc func answerTapped() { showEnglishQuestion() } func showEnglishQuestion() { showingQuestion = !showingQuestion if showingQuestion { // we should be showing the question – reset! prepareForNextQuestion() navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Reveal Answer", style: .plain , target: self, action: #selector(answerTapped)) //englishAnswer.isEnabled = true } else { // we should be showing the answer – show it now, and set the color to be green print("questionCounter before prompt.text in showEnglishQuestion in TestViewController is: \(questionCounter)") prompt.text = testWords[questionCounter].components(separatedBy: "::")[0] prompt.textColor = UIColor(red: 0, green: 0.7, blue: 0, alpha: 1) print("testWords.count in askQuestion in TestViewController is: \(testWords.count)") if questionCounter + 1 < testWords.count { let showNextLanguage = testWords[questionCounter + 1] .components(separatedBy: "::")[7] navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next \(showNextLanguage.capitalized) Word", style: .plain , target: self, action: #selector(answerTapped)) print("showNextLanguage in showEnglishQuestion in TestViewController is: \(showNextLanguage)") // move the question counter one place questionCounter += 1 print("questionCounter in showEnglishQuestion in TestViewController is: \(questionCounter)") } else { // wrap it back to 0 if we've gone beyond the size of the array questionCounter = 0 print("questionCounter in questionCounter = 0 else statement in showEnglishQuestion in TestViewController is: \(questionCounter)") print("words array in showEnglishQuestion in TestViewController when questionCounter = 0 is: \(testWords)") let showNextLanguage = testWords[questionCounter] .components(separatedBy: "::")[7] navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Next \(showNextLanguage.capitalized) Word", style: .plain , target: self, action: #selector(answerTapped)) print("showNextLanguage in if questionCounter == 0 in showEnglishQuestion in TestViewController is: \(showNextLanguage)") // move the question counter one place } englishAnswer.isEnabled = false } synthesizeButton.isEnabled = false synthesizeButton.alpha = 0.25 instructions.isHidden = true } func askQuestion() { // pull out the foreign word at the current question position print("questionCounter before prompt.text in askQuestion in TestViewController is: \(questionCounter)") prompt.text = testWords[questionCounter].components(separatedBy: "::")[1] let animation = UIViewPropertyAnimator(duration: 0.5, dampingRatio: 0.5) { self.stackView.alpha = 1 self.stackView.transform = CGAffineTransform.identity } animation.startAnimation() englishAnswer.isEnabled = true englishAnswer.layer.borderColor = UIColor.black.cgColor as CGColor englishWord = testWords[questionCounter].components(separatedBy: "::")[0] foreignWord = testWords[questionCounter].components(separatedBy: "::")[1] zeroTimesWrong = Int(testWords[questionCounter].components(separatedBy: "::")[2])! homeworkZeroTimesWrong = Int(testWords[questionCounter].components(separatedBy: "::")[3])! attempted = Int(testWords[questionCounter].components(separatedBy: "::")[4])! homeworkAttempted = Int(testWords[questionCounter].components(separatedBy: "::")[5])! homework = Int(testWords[questionCounter].components(separatedBy: "::")[6])! language = testWords[questionCounter].components(separatedBy: "::")[7] } func prepareForNextQuestion() { let animation = UIViewPropertyAnimator(duration: 0.5, curve: .easeInOut) { [unowned self] in self.stackView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8) self.stackView.alpha = 0 } animation.addCompletion { [unowned self] position in self.prompt.textColor = UIColor.black self.askQuestion() } animation.startAnimation() englishAnswer.placeholder = "Tap here to answer" } func saveWords() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { defaults.set(words, forKey: "words") } } }
Posted Last updated
.
Post not yet marked as solved
3 Replies
595 Views
The pop over controller presenting controller class. The print line in loadInitialValues() shows that the pop over picker view value is not passed to this class, it is an empty value. The presenting segue is setup in interface builder, the pop over presents normally, I can select a picker view value and confirm with the done button with the pop over disappearing.import UIKitclass WordsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITabBarControllerDelegate, UIPopoverPresentationControllerDelegate, LanguagesPopOverDelegate { @IBOutlet weak var tableView: UITableView! @IBOutlet weak var clear: UIButton! @IBOutlet weak var reset: UIButton! @IBOutlet weak var sort: UIButton! @IBOutlet weak var languagePicker: UIButton! var words = [String]() var tableViewWords = [String]() var chosenWords = [String]() var useHomework: Bool! var languages = [String]() var language = String() var chosenLanguage = String() var textField: UITextField? let wordString = "Words" var languagesWithWords = [String]() override func viewDidLoad() { super.viewDidLoad() loadLanguages() chosenLanguageLoad() loadInitialValues() print("chosenLanguage in viewDidLoad in WordsViewController is: \(chosenLanguage)") tableView.allowsMultipleSelection = false tableView.reloadData() navigationItem.title = "\(chosenLanguage.capitalized) Words" navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: #selector(test)) navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addNewWord)) print("languages array is: \(languages)") clear.backgroundColor = .init(white: 0.95, alpha: 1.0) clear.layer.cornerRadius = 5 clear.layer.borderWidth = 3 clear.layer.borderColor = UIColor.clear.cgColor reset.backgroundColor = .init(white: 0.95, alpha: 1.0) reset.layer.cornerRadius = 5 reset.layer.borderWidth = 3 reset.layer.borderColor = UIColor.clear.cgColor sort.backgroundColor = .init(white: 0.95, alpha: 1.0) sort.layer.cornerRadius = 5 sort.layer.borderWidth = 3 sort.layer.borderColor = UIColor.clear.cgColor languagePicker.backgroundColor = .init(white: 0.95, alpha: 1.0) languagePicker.layer.cornerRadius = 5 languagePicker.layer.borderWidth = 3 languagePicker.layer.borderColor = UIColor.clear.cgColor sortEnableDisable() clearEnableDisable() resetEnableDisable() } func languageChosen(_ chosenLanguage: String) { navigationItem.title = "\(chosenLanguage.capitalized) Words" loadInitialValues() tableView.reloadData() } func loadLanguages() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { if var savedLanguages = defaults.object(forKey: "savedLanguages") as? [String] { print("savedLanguages in loadLanguages in WordsViewController are: \(savedLanguages)") languages.removeAll() languages = savedLanguages savedLanguages.removeAll() print("savedLanguages in loadLanguages in WordsViewController after removeAll: \(savedLanguages)") print("languages in loadLanguages in WordsViewController are: \(languages)") } } } func chosenLanguageLoad() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { if let loadChosenLanguage = defaults.object(forKey: "languageChosen") as? String { chosenLanguage = loadChosenLanguage print("Chosen language in chosenLanguageLoad in WordsViewController is: \(chosenLanguage)") } } } @objc func loadInitialValues() { words.removeAll() if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { print("words in loadInitialValues in WordsViewController after clear all: \(words)") print("chosenLanguage in loadInitialValues in WordsViewController is: \(chosenLanguage)") if var savedWords = defaults.object(forKey: "words") as? [String] { print("savedWords in loadInitialValues in WordsViewController are: \(savedWords)") words = savedWords savedWords.removeAll() print("savedWords in loadInitialValues in WordsViewController after clear all: \(savedWords)") } else { print("calling saveInitialWordValues()") saveInitialWordValues() } tableViewWords.removeAll() print("chosenLanguage in loadInitialValues in WordsViewController is: \(chosenLanguage)") for word in words { let split = word.components(separatedBy: "::") if split[7] == chosenLanguage { tableViewWords.append(word) } } print("tableViewWords in loadInitialValues in WordsViewController are: \(tableViewWords)") } } func saveInitialWordValues() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { words.removeAll() words.append("Bear::Baissespekulant::0::0::0::0::0::german") words.append("Camel::Kamel::0::0::0::0::0::german") words.append("Cow::Rind::0::0::0::0::0::german") words.append("Fox::Fuchs::0::0::0::0::0::german") words.append("Goat::Geiß::0::0::0::0::0::german") words.append("Monkey::Affe::0::0::0::0::0::german") words.append("Pig::Schwein::0::0::0::0::0::german") words.append("Rabbit::Karnickel::0::0::0::0::0::german") words.append("Sheep::Schaf::0::0::0::0::0::german") words.append("Bear::L'ours::0::0::0::0::0::french") words.append("Camel::Le chameau::0::0::0::0::0::french") words.append("Cow::La vache::0::0::0::0::0::french") words.append("Fox::Le renard::0::0::0::0::0::french") words.append("Goat::La chèvre::0::0::0::0::0::french") words.append("Monkey::Le singe::0::0::0::0::0::french") words.append("Pig::Le cochon::0::0::0::0::0::french") words.append("Rabbit::Le lapin::0::0::0::0::0::french") words.append("Sheep::Le mouton::0::0::0::0::0::french") print("words in saveInitialWordValues in LanguagesViewController are: \(words)") print("At end of saveInitialWordValues") defaults.set(words, forKey: "words") } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) loadLanguages() print("languages in viewWillAppear in WordsViewController are: \(languages)") chosenLanguageLoad() navigationItem.title = "\(chosenLanguage.capitalized) Words" loadInitialValues() print("loadInitialValues in viewWillAppear in WordsViewController are: \(tableViewWords)") clearEnableDisable() resetEnableDisable() sortEnableDisable() tableView.reloadData() } func numberOfSections(in tableView: UITableView) -> Int { return 1 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("number of tableViewWords in tableView(numberOfRowsInSection) are: \(tableViewWords.count)") return tableViewWords.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //print("In cellForRowAt function") let cell = tableView.dequeueReusableCell(withIdentifier: "Word", for: indexPath) let tableViewWord = tableViewWords[indexPath.row] if tableViewWord != "::" { let split = tableViewWord.components(separatedBy: "::") print(split[0]) cell.textLabel?.text = split[0] cell.detailTextLabel?.text = "" //print(cell) } return cell }}The pop over controller class.import UIKitprotocol LanguagesPopOverDelegate: class { func languageChosen(_ chosenLanguage: String)}class LanguagesPopOverController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { @IBOutlet weak var picker: UIPickerView! @IBOutlet weak var done: UIButton! @IBOutlet weak var cancel: UIButton! weak var delegate: LanguagesPopOverDelegate? var languages = [String]() var chosenLanguage = String() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. loadLanguages() view.frame.size.height = 324 picker.delegate = self picker.dataSource = self picker.reloadAllComponents() done.backgroundColor = .init(white: 0.95, alpha: 1.0) done.layer.cornerRadius = 5 done.layer.borderWidth = 3 done.layer.borderColor = UIColor.clear.cgColor cancel.backgroundColor = .init(white: 0.95, alpha: 1.0) cancel.layer.cornerRadius = 5 cancel.layer.borderWidth = 3 cancel.layer.borderColor = UIColor.clear.cgColor } // Number of columns of data func numberOfComponents(in picker: UIPickerView) -> Int { return 1 } // The number of rows of data func pickerView(_ picker: UIPickerView, numberOfRowsInComponent component: Int) -> Int { print("Number of languages are: \(languages.count)") return languages.count } // The data to return for the row and component (column) that's being passed in func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return languages[row].capitalized } // Capture the picker view selection func pickerView(_ picker: UIPickerView, didSelectRow row: Int, inComponent component: Int) { // This method is triggered whenever the user makes a change to the picker selection. // The parameter named row and component represents what was selected. chosenLanguage = languages[row] print("chosenLanguage in pickerView in LanguagePickerViewController is: \(chosenLanguage)") } func chooseALanguage() { delegate?.languageChosen(chosenLanguage) } @IBAction func done(_ sender: Any) { chosenLanguageSave() let languagesPopOverVC = LanguagesPopOverController() let wordsVC = WordsViewController() languagesPopOverVC.delegate = wordsVC languagesPopOverVC.chooseALanguage() //wordsVC.chosenLanguage = self.chosenLanguage //let languagesVC = LanguagesViewController() //languagesVC.chosenLanguage = self.chosenLanguage //let homeworkVC = HomeworkViewController() //homeworkVC.chosenLanguage = self.chosenLanguage //let testVC = TestViewController() //testVC.chosenLanguage = self.chosenLanguage dismiss(animated: true, completion: nil) } @IBAction func cancel(_ sender: Any) { dismiss(animated: true, completion: nil) } func chosenLanguageSave() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { defaults.set(chosenLanguage, forKey: "languageChosen") print("chosenLanguage in chosenLanguageSave in LanguagesPopOverController is: \(chosenLanguage)") } } func loadLanguages() { if let defaults = UserDefaults(suiteName: "group.co.uk.tirnaelectronics.hyperpolyglot.todayview") { if var savedLanguages = defaults.object(forKey: "savedLanguages") as? [String] { print("savedLanguages in loadLanguages in LanguagesPopOverController are: \(savedLanguages)") languages.removeAll() languages = savedLanguages savedLanguages.removeAll() print("savedLanguages in loadLanguages in LanguagesPopOverController after removeAll: \(savedLanguages)") print("languages in loadLanguages in LanguagesPopOverController are: \(languages)") } } }}
Posted Last updated
.