我是IOS开发的新手,但我正在编写一个应用程序,其中用户从tableView中选择一行(视图1)。然后,用户选择的文本将显示在同一屏幕上的标签中。当用户按下按钮时,标签中的文本存储在UserDefaults中,视图变为视图2。这里有viewDidAppear()方法,该方法将String从UserDefaults中取出,并在视图2中更改另一个Label的文本。
这里是视图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")
}
}
这是视图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"
}
}
}
And here is the picture of the second view
在第二张图片中,您可以看到标有“ Name Anmelden”的标签。该文本实际上必须更改为“ Willkommen bei deiner(schoolname)App”,但实际上并没有或经过很长一段时间。
正确显示值的学校名称,并且打印语句可以正常工作,但LabelWelcome.text = ...无效或需要很长时间。如果我尝试在viewDidLoad()方法中设置文本,则效果很好。
您知道为什么还是可以调用一种方法来更新屏幕吗?
谢谢
Manuel
PS:Here is the screenshot of my login class (view 2)
Here is the first screenshot of my ChooseSchool class (view 1)
Here is the second screenshot of my ChooseSchool class (view 1
答案 0 :(得分:0)
点击table cell
时,您需要选择button
或添加文本:
@IBAction func schoolChosenClicked(_ sender: Any) {
LabelSchoolName.text = SchoolNames[indexPath.row]
UserDefaults.standard.set(LabelSchoolName.text, forKey: "chosenSchool")
}
在那之后您仍然遇到问题,然后在synchronize
中添加文本时像这样添加userdefault
(不建议这样做):
UserDefaults.standard.set(LabelSchoolName.text, forKey: "chosenSchool")
UserDefaults.standard.synchronize()