在我发布另一个问题后,我现在尝试在swift中的AppDelegate类中声明一个全局用户名变量。我的目标是让用户在启动屏幕中输入他的用户名,然后在其他视图中的标签上弹出该用户名 - 简单的通用用户名。
我在AppDelegate类中声明了用户名
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var userName = ""
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
在我的主控制器中,我有一个标签和一个设置名称的按钮功能
class ViewController: UIViewController {
@IBOutlet var userLabel : UILabel!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func setName (){
appDelegate.userName = userLabel.text!;
}
}
这个想法就是这个名字会在我的player2控制器的标签中弹出
import Foundation
import UIKit
class Player2 : UIViewController {
@IBOutlet var player2 : UILabel!
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.player2.text = appDelegate.userName as? String
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
答案 0 :(得分:0)
几个解决方案:
使用NSUserDefaults
存储用户名
在你AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
NSUserDefaults.standardUserDefaults().setObject("VitaliyGozhenko", forKey: "Username")
return true
}
在你的UIViewController中:
override func viewDidLoad() {
super.viewDidLoad()
userLabel.text = NSUserDefaults.standardUserDefaults().objectForKey("Username")
}
User
,用于存储与用户相关的用户名,电子邮件和其他信息,并添加类属性[User currentUser]
以存储当前用户信息。在此之后,您可以访问应用程序中的所有当前用户信息在新文件User.swift中为User
创建新类:
import UIKit
class User: NSObject {
static let currentUser = User()
var username:String?
}
之后你可以修改你的AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
User.currentUser.username = "VitaliyGozhenko"
return true
}
在你的UIViewController中:
override func viewDidLoad() {
super.viewDidLoad()
userLabel.text = User.currentUser.username
}
答案 1 :(得分:0)
以下是将userName
从ViewController
传递到另一个ViewController
的一种简单方法。
//Set your userName with specific key
@IBAction func setName (){
NSUserDefaults.standardUserDefaults().setObject(userLabel.text, forKey: "userName")
}
之后,您可以通过SecondViewController
这种方式从这个方式读取该值:
override func viewDidLoad() {
super.viewDidLoad()
let userName = NSUserDefaults.standardUserDefaults().objectForKey("userName") as! String
player2.text = "\(userName)"
}
您无需将任何变量声明为AppDelegate
类。
只需从userLabel.text
课程中获取ViewController
的值并存储即可。之后,您可以在项目的任何位置从NSUserDefaults
阅读。