2017-01-31 1 views
0

Мне удалось создать табличное представление с массивом или сообщениями, и когда я постучал в ячейку tableview, он отображает предупреждение и поле uitext, которые вы можете изменить текст таблицы. Теперь я пытаюсь сохранить текст таблицы («сообщение»), когда он изменился. Потому что, когда я перехожу к другому контроллеру представления и возвращаюсь, он не сохраняется. Я новичок в быстром программировании и задаюсь вопросом, как я могу это достичь. Я прочитал некоторые статьи, которые мне нужны для использования nsuserdefaults, но я не знаком с этим. вот мой код ниже. Спасибо, парни.Сохранение текста таблицы после редактирования swift

class Messages: UITableViewController { 

    @IBOutlet var uitableView: UITableView! 

    var tField: UITextField! 
    var index: Int? 
    var msgArray: [String]! 

    var messages = ["Message 1", "Message 2", "Message 3", "Message 4", "Message 5", "Message 6"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     tableView.delegate = self 
     tableView.dataSource = self 

    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return messages.count 
    } 

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

     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
     let messagesCell = messages[indexPath.row] 
     cell.textLabel?.text = messagesCell 

     return cell 

    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     let path = tableView.indexPathForSelectedRow 
     index = path?.row 

     changeMessage() 
    } 

    func changeMessage() { 

     let alert = UIAlertController(title: "Message", message: "Enter new preset message", preferredStyle: UIAlertControllerStyle.alert) 

     alert.addTextField(configurationHandler: configurationTextField) 

     let doneAction = UIAlertAction(title: "Done", style: UIAlertActionStyle.default, handler:{ (UIAlertAction) in 

      let modelString = self.tField.text 
      self.messages[self.index!] = modelString! 
      self.tableView.reloadData() 

     }) 

     let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

     alert.addAction(doneAction) 
     alert.addAction(cancelAction) 
     self.present(alert, animated: true, completion: nil) 
    } 

    func configurationTextField(textField: UITextField!){ 
     if (textField) != nil { 
      tField = textField 
      textField.text = messages[index!] 
     } 
    } 
} 
+0

Я бы не использовал пользовательские значения по умолчанию для сохранения данных ячейки таблицы. Пользовательские значения по умолчанию используются главным образом для хранения предпочтений пользователя (например, URL-адрес для их фото профиля) или предпочтений приложения (например, логическое значение, указывающее, должно ли приложение отображать определенный контроллер просмотра при запуске). Если вы просто возитесь с этим проектом, вы можете следовать этому руководству: https://www.raywenderlich.com/145809/getting-started-core-data-tutorial Если это проект, который вы собираетесь потратить много времени, вы должны провести исследование того, как вы собираетесь сохранять данные. – alexisSchreier

+0

Попробуйте это. 'override func viewWillAppear (_ animated: Bool) { super.viewWillAppear (анимированный) self.tableView.reloadData() }' } ' –

+0

" попытаться извлечь все данные, которые вы хотите показать в виде таблицы в методе viewDidAppear, а затем «reload table» в этом методе. –

ответ

1

Попробуйте использовать nsuserdefaults. В SWIFT 3

override func viewWillAppear(_ animated: Bool) { 

    //Get the array 
    if let array = UserDefaults.standard.object(forKey:"messages") as? Array<String> { 

      self.messages = array 
    } 

} 


func changeMessage() { 

    let alert = UIAlertController(title: "Message", message: "Enter new preset message", preferredStyle: UIAlertControllerStyle.alert) 

    alert.addTextField(configurationHandler: configurationTextField) 

    let doneAction = UIAlertAction(title: "Done", style: UIAlertActionStyle.default, handler:{ (UIAlertAction) in 

     let modelString = self.tField.text 
     self.messages[self.index!] = modelString! 
     UserDefaults.standard.set(self.messages, forKey: "messages") // Set the array with changes 
     self.tableView.reloadData() 

    }) 

    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil) 

    alert.addAction(doneAction) 
    alert.addAction(cancelAction) 
    self.present(alert, animated: true, completion: nil) 
} 
+0

Спасибо, что это работает! –

+0

приветствуется приятель :-) –

+0

@ Lineesh K Mohan Любой отзыв о том, как я могу изменить свой массив сообщений. Потому что он возвращается к значению переменной, которую я установил. 'var messages = [" Сообщение 1 "," Сообщение 2 "," Сообщение 3 "," Сообщение 4 "," Сообщение 5 "," Сообщение 6 "]' Потому что, когда я закрываю приложение, оно возвращается к значению по умолчанию. –

0
 let defaults = UserDefaults.standard 
     defaults.set("123", forKey: "oldString") 
    print("\(UserDefaults.standard.value(forKey: "oldString")!)") 

Это может помочь вам.