Я новичок в разработке IOS, но я программирую приложение, в котором пользователь выбирает строку из tableView (представление 1).Текст, выбранный пользователем, затем отображается в метке на том же экране.Когда пользователь нажимает кнопку, текст из метки сохраняется в UserDefaults, и представление меняется на представление 2. Здесь у меня есть метод viewDidAppear (), который извлекает строку из UserDefaults и изменяет текст другой метки в представлении 2.
Вот код для представления 1. Функция, которая вызывается при нажатии кнопки, называется schoolChosenClicked ():
import UIKit
class ChooseSchool: UIViewController, UITableViewDataSource, UITableViewDelegate {
var SchoolNames = [String]()
@IBOutlet weak var table: UITableView!
var refresher: UIRefreshControl!
@IBOutlet weak var LabelSchoolName: UILabel!
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return SchoolNames.count
}
//Set the context
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = SchoolNames[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
LabelSchoolName.text = SchoolNames[indexPath.row]
}
override func viewDidLoad() {
super.viewDidLoad()
SchoolNames.append("Item")
SchoolNames.append("Item")
SchoolNames.append("Item")
SchoolNames.append("")
self.table.register(UITableViewCell.self, forCellReuseIdentifier: "cell");
self.table.dataSource = self
self.table.delegate = self
self.table.reloadData()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func schoolChosenClicked(_ sender: Any) {
UserDefaults.standard.set(LabelSchoolName.text, forKey: "chosenSchool")
}
}
Вот изображение представления 1
Вот код для вида 2
import UIKit
class Login: UIViewController {
@IBOutlet weak var LabelWelcome: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewDidAppear(_ animated: Bool) {
if var schoolname = UserDefaults.standard.object(forKey: "chosenSchool") as? String
{
print("Das ist der Schoolname:" + schoolname+".")
LabelWelcome.text = "Willkommen bei deiner \(schoolname) App"
}
}
}
А вот и картинка второго вида
На втором снимке выможно увидеть ярлык с надписью "Имя Anmelden".Этот текст на самом деле должен измениться на «Willkommen bei deiner (schoolname) App», но это не так или после длительного периода времени.
Значение schoolname хорошо присутствует, и оператор print работает нормально, но LabelWelcome.text = ... не работает или занимает много времени.Если я пытаюсь установить текст в методе viewDidLoad (), он работает нормально.
Знаете ли вы, почему существует метод, который я могу вызвать для обновления экрана?
Спасибо,
Мануэль
PS: Вот скриншот моего класса входа (вид 2)
Вот первый скриншот моего ChooseSchoolкласс (вид 1)
Вот второй скриншот моего класса ChooseSchool (вид 1