从另一个视图控制器在swift上更改标签
我想更改另一个viewController
的标签。从另一个视图控制器在swift上更改标签
第一个视图控制器是MenuController
。第二个是LoginViewController
。
我想更改MenuController的Label.text
从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)
}
但发生一个错误。
fatal error: unexpectedly found nil while unwrapping an Optional value
我该如何解决?
感谢您的帮助。
另一种实现方法是使用NSNotificationCenter
。打击是,示例:
在你MenuController
添加以下代码:你LoginViewController
后退按钮的动作看起来就像
func refreshLbl(notification: NSNotification) {
print("Received Notification")
lbl.text = "LogOut"
}
现在:
而且添加这个helper方法:
@IBAction func back(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
现在,只要您按下从LoginViewController
您的refreshLbl
方法将从MenuController
调用。请参阅THIS示例。
谢谢Dharmesh !!!!它工作得很好。 :) –
斯威夫特3版本:
在你MenuController
(其中标签需要更改)添加以下代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(refreshLbl), name: NSNotification.Name(rawValue: "refresh"), object: nil)
}
而且添加这个helper方法:
func refreshLbl() {
print("Received Notification")
lbl.text = "LogOut"
}
现在在您的LoginViewController
您的后退按钮动作将如下所示:
@IBAction func backButton(_ sender: Any) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refresh"), object: nil)
// Any additional code...
}
现在,只要您按下从LoginViewController
的按钮,您的refreshLbl()
方法将从MenuController
调用。
另外,如果你创建一个新的文件迅速比方说:Constants.swift
:
import Cocoa
let LABEL_REFRESH = NSNotification.Name("refresh")
然后你就可以缩短代码:
NotificationCenter.default.post(name: LABEL_REFRESH, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(refreshLbl), name: LABEL_REFRESH, object: nil)
不要上传图片的代码。你可以在这里简单的复制和粘贴你的代码。 – Rumin
在这里发布您的代码... –
对不起家伙。我在这里很新。我将学习如何使用*。 –