在 swift 上更改另一个 viewcontroller 的标签
change label from another viewcontroller on swift
我想更改另一个标签 viewController
。
第一个viewcontroller是MenuController
。第二个是 LoginViewController
.
我想将 MenuController 的 Label.text
从 LoginViewController
更改为 Label.text
。
在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
。 Blow 就是一个例子:
在您的 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
中,您的后退按钮操作将如下所示:
@IBAction func back(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
现在,只要您从 LoginViewController
按下后退按钮,您的 refreshLbl
方法就会从 MenuController
.
调用
有关详细信息,请参阅 THIS 示例。
Swift3版本:
在您的 MenuController
(标签需要更改的地方)添加此代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(refreshLbl),
name: NSNotification.Name(rawValue: "refresh"),
object: nil)
}
同时添加这个辅助方法:
@objc 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
.
调用
我想更改另一个标签 viewController
。
第一个viewcontroller是MenuController
。第二个是 LoginViewController
.
我想将 MenuController 的 Label.text
从 LoginViewController
更改为 Label.text
。
在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
。 Blow 就是一个例子:
在您的 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
中,您的后退按钮操作将如下所示:
@IBAction func back(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
现在,只要您从 LoginViewController
按下后退按钮,您的 refreshLbl
方法就会从 MenuController
.
有关详细信息,请参阅 THIS 示例。
Swift3版本:
在您的 MenuController
(标签需要更改的地方)添加此代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(refreshLbl),
name: NSNotification.Name(rawValue: "refresh"),
object: nil)
}
同时添加这个辅助方法:
@objc 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
.