我想将数据传递给名为“addParty”的视图控制器。为了说明这一点,我的应用程序来自A - > B - > C - > D. A到C是接收用户信息的设置页面。这些页面后跟D,即“addParty”,我希望传递A到C的所有数据。
下面是我到目前为止用视图控制器A到C做的事情的一个例子。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
if (segue.identifier == "Setup1Segue") {
var DestViewController: addToParty = segue.destinationViewController as! addToParty
// path the cell's content to your detailViewController
DestViewController.PartyName = etPartyName.text!
DestViewController.Address = etAddress.text!
DestViewController.City = etCity.text!
DestViewController.State = etState.text!
DestViewController.Zip = etZip.text!
}
}
答案 0 :(得分:4)
您需要在ViewController中覆盖'prepareForSegue'方法。
在你的 FirstViewController.swift 中定义了显示SecondViewController的任何动作,在这个ViewController(SecondViewControler.swift)中你需要声明你将收到的变量FirstViewController.swift
FirstViewController.swift
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "btnSubmitSencondViewController") {
var svc = segue.destinationViewController as SecondViewController;
svc.dataPassed = fieldA.text
svc.secondDataPassed = fieldB.text
}
}
最后!在我们的第二个视图控制器类文件(SecondViewController.swift)中,我们需要在调用viewDidLoad时将变量分配给显示标签。这很简单,只需查看覆盖功能viewDidLoad()并输入以下代码。
labelA.text = dataPassed
labelB.text = secondDataPassed
答案 1 :(得分:1)
您可以使用所有视图控制器通用的类,并将您的详细信息保存到此公共类变量中。
首先创建一个名为PartyDetails的新swift文件
import Foundation
class PartyDetails {
class var sharedInstance: PartyDetails {
struct Static {
static var instance: PartyDetails?
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token) {
Static.instance = PartyDetails()
}
return Static.instance!
}
var partyName: String?
var address: String?
var city: String?
var state: String?
var zip: Int?
}
然后在ViewControllers A,B,C中输入此代码
例如: -
class A: UIViewController{
let partyInfo = PartyDetails.sharedInstance
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Setup1Segue" {
let jobDetailViewController = segue.destinationViewController as! B
self.partyInfo.partyName = label1.text // save your info
self.partyInfo.address = label2.text // save your info
}
}
}
}
然后在D级使用这样,
class D: UIViewController {
var partyInfo = PartyDetails.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
myLabel1.text = self.partyInfo.partyName
myLabel2.text = self.partyInfo.address
}
}
答案 2 :(得分:1)
如果信息非常重要,您需要确保可以在整个应用中访问该信息,您可以将变量放在应用代理中
首先,制作像这样的自定义类
import Foundation
class PartyDetails: NSObject
{
var partyName: String? = nil
var address: String? = nil
var city: String? = nil
var state: String? = nil
var zip: Int? = nil
}
在您的app appate中现在声明一个变量
var partyDetails: PartyDetails! = nil
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
// Override point for customization after application launch.
loadPartyDetailsOrInitializeHere()
return true
}
现在,您可以通过以下代码引用它来访问视图控制器中任何位置的partyDetails对象
var partyDetails = (UIApplication.sharedApplication().delegate as! YOUR_APP_DELEGATE_CLASS_HERE).partyDetails
您必须将YOUR_APP_DELEGATE_CLASS_HERE替换为您的委托类。
这种方法比使用segue的变化传递对象更好。 实际上我经常这样做,他们的工作就像一个魅力。