我想改变另一个标签viewController
.
第一个viewcontroller是MenuController
.第二个是LoginViewController
.
我想改变MenuController的Label.text
距离LoginViewController
.
在LoginViewController
:
let viewController = MenuController()
viewController.changeLabel("logout")
Run Code Online (Sandbox Code Playgroud)
在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)
}
Run Code Online (Sandbox Code Playgroud)
但是会发生错误.
致命错误:在展开Optional值时意外发现nil
我该如何解决?
谢谢你的帮助.
Dha*_*esh 13
实现这一目标的另一种方法是你可以使用NSNotificationCenter
.打击就是这样的例子:
在您MenuController
添加此代码:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "refreshLbl:", name: "refresh", object: nil)
}
Run Code Online (Sandbox Code Playgroud)
还要添加此辅助方法:
func refreshLbl(notification: NSNotification) {
print("Received Notification")
lbl.text = "LogOut"
}
Run Code Online (Sandbox Code Playgroud)
现在在您LoginViewController
的后退按钮操作将如下所示:
@IBAction func back(sender: AnyObject) {
NSNotificationCenter.defaultCenter().postNotificationName("refresh", object: nil, userInfo: nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
现在,当你永远从按后退按钮LoginViewController
的refreshLbl
方法将调用从MenuController
.
有关详细信息,请参阅此示例.
斯威夫特 3版本:
在您的MenuController
(需要更改标签的地方)添加以下代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(refreshLbl),
name: NSNotification.Name(rawValue: "refresh"),
object: nil)
}
Run Code Online (Sandbox Code Playgroud)
还添加这个辅助方法:
@objc func refreshLbl() {
print("Received Notification")
lbl.text = "LogOut"
}
Run Code Online (Sandbox Code Playgroud)
现在,您LoginViewController
的后退按钮操作将如下所示:
@IBAction func backButton(_ sender: Any) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "refresh"), object: nil)
// Any additional code...
}
Run Code Online (Sandbox Code Playgroud)
现在,每当您从方法中按后退按钮时,LoginViewController
就会refreshLbl()
从MenuController
.
归档时间: |
|
查看次数: |
6365 次 |
最近记录: |