我在故事板中设置了UITableView
,其中静态行填充了不同的内容,并且所有内容都转到单个UIViewController
。我还为我打算加载的每个视图(包含不同的内容)都有一个单独的plist,我想根据选择的行加载它。
作为奖励,我宁愿有一个单独的plist,UITableViewController
将填充行(而不是在故事板中有120多个静态行),但我也不确定如何做到这一点。 / p>
我搜索了很多,但只找到了Objective-C的东西。我对Swift有点新意,从未真正深入到Objective-C,但我认为我已经掌握了基础知识。
是的,我的问题。我的问题是,如何在显示UIViewController时加载每个plist(每行一个)并显示其内容? 我的奖金问题是:如何将我的120多个静态行合并到一个基本上完成同样事情的plist中,除了编辑SB以添加新行,我只需要添加到的plist?
答案 0 :(得分:0)
首先,使用plist存储此类内容很少见。不容易维护。使用XML或json存储它是更好的选择。
问你的问题#1,
将下面的代码放到一个循环中,将你的plist加载到这样的字典中:
let path = NSBundle.mainBundle().pathForResource("Your_path", ofType: "plist")
let dict = NSDictionary(contentsOfFile: path!)
您可能希望将所有dicts存储到一个数组中,这样您就知道有多少个plist。假设我们在您的视图控制器中有dictArray
属性来保存您的所有信息。
您没有在UITableView上为SB添加静态单元格,但效率不高。您只需让dataSource委托加载数据并根据需要创建尽可能多的单元格。
我会留下一些代码供你写,这会让你感到温暖。我只是给出了代码的基本部分。
不要忘记设置您的dataSource并委托给适当的对象,例如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,并且在两个视图之间有一个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)
或者如果您在导航控制器中:
self.navigationController?.pushViewController(nextViewController, animated: true)
要将plist合并到一个plist中,您可能需要编写一些小程序或脚本来合并它们;或复制它们。有很多方法可以做到这一点。但正如我所说,我不建议你继续使用plist来做这些事情。你最好在开始时改为另一种形式。否则,当你意识到你真的需要改变时,为时已晚,你需要重写许多代码。