Я создаю приложение, в котором одна из функций заключается в том, что пользователь должен иметь возможность написать имя человека и ответ на вопрос - и затем при нажатии кнопки сохранения его / ее следует снова перенаправить на предыдущий контроллер, который не создал tableViewCell
с этими данными в качестве заголовка.(Позже вы можете, конечно, щелкнуть эту ячейку и просмотреть данные в третьем контроллере представления.)
Мой способ решения этой проблемы состоял в том, чтобы позволить кнопке " save " сохранить имя и ответ с помощьюиспользуя NSUserDefault
.Затем одновременно подключите segue
к кнопке, чтобы она перенаправила пользователя на предыдущий контроллер - и, наконец, чтобы tableView в предыдущем контроллере ссылался на вновь созданный NSUserDefault-key
в поле cell.text.
У меня два вопроса.
Почему это не работает?Мой код от обоих viewControllers ниже.Я не понимаю, почему это не работает.
Если я заставлю это работать: как реализовать эффект, который каждый раз, когда вы вводите «Создание viewController», в котором вы можете написать имя и ответ, -пользователь получает возможность сохранить НОВОГО человека и добавить НОВУЮ ячейку вместо переопределения старой, что, боюсь, произойдет, если я получу текущий подход к работе ...
Код в « Создание viewController », где вы можете написать имя и ответ:
class CreateNewPerson: UIViewController {
let defaults = UserDefaults.standard
@IBOutlet weak var Question: UILabel!
@IBOutlet weak var ExtraIdentifier: UILabel!
@IBOutlet weak var PersonName: UITextField!
@IBOutlet weak var PersonAnswer: UITextField!
@IBOutlet weak var PersonExtraIdentifier: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
showDiaryIdentifiers () }
func showDiaryIdentifiers () {
let DiaryQuestion = self.defaults.string(forKey: "DiaryQuestionKey")
let ExtraIdentifer = self.defaults.string(forKey: "RandomIdentifierKey")
self.Question.text = DiaryQuestion
self.ExtraIdentifier.text = ExtraIdentifer
}
@IBAction func SavePerson () {
self.defaults.setValue(self.PersonName.text, forKey: "PersonNameKey")
self.defaults.setValue(self.PersonAnswer.text, forKey: "PersonAnswerKey")
self.defaults.setValue(self.PersonExtraIdentifier.text, forKey: "PersonExtraIdentiferKey")
} }
Код в другом viewController:
class AllPersonsInYourDiary: UIViewController, UITableViewDelegate, UITableViewDataSource {
let defaults = UserDefaults.standard
@IBOutlet weak var ShowingDiaryName: UILabel!
@IBOutlet weak var ShowingDiaryQuestion: UILabel!
@IBOutlet weak var ShowingExtraIdentifer: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
showDiaryIdentifiers()
self.navigationItem.rightBarButtonItem = self.editButtonItem
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func showDiaryIdentifiers () {
let DiaryName = self.defaults.string(forKey: "DiaryNameKey")
let DiaryQuestion = self.defaults.string(forKey: "DiaryQuestionKey")
let ExtraIdentifer = self.defaults.string(forKey: "RandomIdentifierKey")
self.ShowingDiaryName.text = DiaryName
self.ShowingDiaryQuestion.text = DiaryQuestion
self.ShowingExtraIdentifer.text = ExtraIdentifer
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Person1", for: indexPath)
cell.textLabel?.text = self.defaults.string(forKey: "PersonNameKey")
cell.textLabel?.numberOfLines = 0
cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)
return cell
}
В этом коде, я думаю, не работает метод cellForRowAt
.Что я делаю не так?Сейчас он вообще не создает никаких ячеек.
Кроме того, я знаю, что я не должен возвращать 1 строку и 1 раздел.Это только сейчас.Я знаю, что должен в конце концов вернуть Something.count - но я еще не понял, что это такое ...
Спасибо!