我想从另一个viewController更改标签。

第一个viewcontroller是MenuController。第二个是LoginViewController

我想从Label.text更改MenuController的LoginViewController

LoginViewController中:

let viewController = MenuController()
viewController.changeLabel("logout")

MenuController中:
class MenuController: UITableViewController {
    var attractionImages = [String]()
    var attractionNames = [String]()
    var webAddresses = [String]()

    @IBOutlet weak var loginLabel: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()

        loginLabel.text = "Login"
        print(loginLabel.text)

    }

    func changeLabel(Log: String)O {
        self.loginLabel.text = log
        print (log)
    }

但是会发生错误。



我该如何解决?

谢谢你的帮助。

最佳答案

另一种实现方法是可以使用NSNotificationCenter。吹就是这样的例子:

在您的MenuController中添加以下代码:

override func viewDidLoad() {
    super.viewDidLoad()
     NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshLbl:", name: "refresh", object: nil)
}

还要添加此辅助方法:
func refreshLbl(notification: NSNotification) {

    print("Received Notification")
    lbl.text = "LogOut"
}

现在在LoginViewController中,您的后退按钮 Action 将如下所示:
@IBAction func back(sender: AnyObject) {
    NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
    self.dismissViewControllerAnimated(true, completion: nil)
}

现在,无论何时您从LoginViewController按下返回按钮,您的refreshLbl方法都会从MenuController调用。

有关更多信息,请参见THIS示例。

关于ios - swift 从另一个viewcontroller更改标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33251132/

10-11 17:13