быстро, текст в метке не изменяется в viewDidAppear () - PullRequest
0 голосов
/ 14 сентября 2018

Я новичок в разработке 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

1 Ответ

0 голосов
/ 14 сентября 2018

Вам нужно выбрать 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...