【问题标题】:Reuse Table View variables Swift重用表视图变量 Swift
【发布时间】:2015-02-22 01:57:17
【问题描述】:

这是表格视图:

   public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        var rowData: NSDictionary = self.tableData[indexPath.row] as NSDictionary
           let too: AnyObject = rowData ["time"] as NSString
        var name: String = rowData["time"] as String
        var formattedPrice: String = rowData["date"] as String

        var alert: UIAlertView = UIAlertView()
        alert.title = name
        alert.message = formattedPrice
        alert.addButtonWithTitle("Ok")
        alert.show()
         println ("hi")
         println (too)   
    }

我需要在另一个视图控制器中引用这些变量。我无法将上面的陈述放在此:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "segueTest") {
var svc = segue!.destinationViewController as secondViewController;
svc.toPass = textField.text
}
}

我正在尝试关闭单元格点击。 来自http://jamesleist.com/ios-swift-passing-data-between-viewcontrollers/

【问题讨论】:

  • 不清楚您所说的“将上​​面的陈述放在这个里面”是什么意思。如果您的 segue 连接到一个单元格,那么 sender 参数(在 prepareForSegue:sender 中)将是该单元格,您可以使用表格视图方法 indexPathForCell: 来获取 indexPath。您根本不需要实现 didSelectRowAtIndexPath。
  • 如何将 segue 连接到单元格点击?
  • 右键单击(或控制单击)单元格,然后拖动到控制器(与任何 segue 相同)。
  • 是否可以识别在一个类、另一个类或视图控制器中定义的共享实例值?
  • 我不知道你们所说的“共享实例值”是什么意思。在任何情况下,您都无法在控制器之间建立 IBOutlet 连接。

标签: ios iphone uitableview swift


【解决方案1】:

如果不是很多数据,我用来在视图控制器之间传递数据的策略是将值存储在NSUserDefaults 中。

设置值:第一次获取数据时,将其存储在NSUserDefaults

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() //This class variable needs to be defined every class where you set or fetch values from NSUserDefaults
public func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var rowData: NSDictionary = self.tableData[indexPath.row] as NSDictionary
    let too: AnyObject = rowData ["time"] as NSString
    var name: String = rowData["time"] as String
    var formattedPrice: String = rowData["date"] as String
    defaults.setObject(rowData, forKey: "rowData")
    defaults.setObject(too, forKey: "too")
    defaults.setObject(name, forKey: "name")
    defaults.setObject(formattedPrice, forKey: "formattedPrice")
    defaults.synchronize() //Call this after you're done editing defaults, it saves your change to the disk

    var alert: UIAlertView = UIAlertView()
    alert.title = name
    alert.message = formattedPrice
    alert.addButtonWithTitle("Ok")
    alert.show()
     println ("hi")
     println (too)   
}

获取值:当您需要获取值时,只需从NSUserDefaults 获取即可。

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryForKey("rowData") as? NSDictionary
defaults.objectForKey("too") as? String
defaults.objectForKey("name") as? String
defaults.objectForKey("formattedPrice") as? String

这样做可以让您访问任何类中存储的值,并允许数据在应用程序关闭和重新打开后保留。如果要在应用关闭后清除数据,在AppDelegateapplicationWillTerminate(application: UIApplication)函数中,为之前设置的每个键调用removeObjectForKey函数。

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
defaults.removeObjectForKey("rowData")
defaults.removeObjectForKey("too")
defaults.removeObjectForKey("name")
defaults.removeObjectForKey("formattedPrice")
defaults.synchronize()

NSUserDefaults 上的有用来源

NSUserDefulats 类参考:链接here

【讨论】:

  • 没问题!如果您认为答案很好,请也给答案投票。
  • 我试过给你投票,我没有 15 个信用,所以我无法升级。如果您认为我的问题很好,请投票!
  • 我忘了补充:在方法中编辑默认值后,您应该做的最后一条语句是defaults.synchronize() 函数。这会将您的所有更改保存到磁盘。
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2018-04-04
  • 2014-10-22
相关资源
最近更新 更多