gpt4 book ai didi

ios - 使用 .plist 中的数据加载 UIViewController

转载 作者:行者123 更新时间:2023-11-30 14:18:54 24 4
gpt4 key购买 nike

我有一个UITableView在 Storyboard中设置静态行,其中填充了不同的内容,并且所有内容都进入一个 UIViewController 。我还为我打算加载的每个 View (包含不同的内容)提供了一个单独的 plist,我希望根据选择的行进行加载。

作为奖励,我宁愿有一个单一的 plist UITableViewController将填充行(而不是在 Storyboard 中包含 120 多个静态行),但我也不确定如何做到这一点。

我搜索了很多,但只找到了 Objective-C 的东西。我对 Swift 有点陌生,从未真正深入了解 Objective-C,但我认为我已经掌握了基础知识。

对了,我的问题。我的问题是,如何加载每个单独的 plist(每一行一个)并在显示 UIViewController 时显示其内容? 我的额外问题是:如何将 120 多个静态行合并到一个 plist 中,该 plist 基本上完成相同的任务,除了不需要编辑 SB 来添加新行,我只需要添加到列表?

最佳答案

首先,很少使用plist来存储这样的内容。不容易维护。使用XML或者json来存储是更好的选择。

问候你的问题#1,

将下面的代码放入一个循环中,将您的 plist 加载到这样的字典中:

let path = NSBundle.mainBundle().pathForResource("Your_path", ofType: "plist")
let dict = NSDictionary(contentsOfFile: path!)

您可能希望将所有字典存储到一个数组中,这样您就知道有多少个 plist。假设我们在 View Controller 中有 dictArray 属性来保存所有字典。

不要在 SB 上为 UITableView 添加静态单元格,这样效率不高。您只需让 dataSource 委托(delegate)加载数据并创建所需数量的单元格即可。

我会留下一些代码让你写,这会让你暖和起来。我只给出代码的核心部分。

不要忘记将数据源和委托(delegate)设置为正确的对象,例如self!

那么,

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dictArray.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath) as UITableViewCell

let row = indexPath.row
let dictOfPlist = self.dictArray[row]

// now you get your plist while configuring your cells,
// do your customization for your cells from now on

return cell
}

// MARK: UITableViewDelegate Methods
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let row = indexPath.row
let dictOfPlist = self.dictArray[row]

// if you tap one cell, now you get its corresponding plist
// time to pass the data to your view controller
// either use segue or other ways to do it
}
}

将数据传递到新 UIViewController 的一些方法:

如果您的 segue 存在于 Storyboard 中,并在 2 个 View 之间有一个 segue 标识符,则可以使用以下方式以编程方式调用它:

performSegueWithIdentifier("mySegueID", sender: yourDataDict)

稍后您可以在 nextViewController 中访问 yourDataDict 来加载它

你也可以这样做:

nextViewController.dataDict = yourDataDict // set a public property so you can access it later on

presentViewController(nextViewController, animated: true, completion: nil)

或者如果您位于导航 Controller 中:

self.navigationController?.pushViewController(nextViewController, animated: true)

要将您的 plist 合并为一个 plist,您可能需要编写一些小程序或脚本来合并它们;或复制它们。有很多方法可以做到这一点。但正如我所建议的,我不建议你继续使用 plist 来做这样的事情。你最好一开始就换成另一种形式。否则,当您意识到确实需要更改时,为时已晚,并且您有很多代码需要重写。

关于ios - 使用 .plist 中的数据加载 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com