快速,标签中的文本在viewDidAppear()中保持不变

时间:2018-09-14 07:18:08

标签: swift

我是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")

    }



}

Here is a picture of view 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"

        }
    }


}

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

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()