使用来自.plist

时间:2015-06-10 01:43:40

标签: ios swift uitableview uiviewcontroller

我在故事板中设置了UITableView,其中静态行填充了不同的内容,并且所有内容都转到单个UIViewController。我还为我打算加载的每个视图(包含不同的内容)都有一个单独的plist,我想根据选择的行加载它。

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

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

是的,我的问题。我的问题是,如何在显示UIViewController时加载每个plist(每行一个)并显示其内容? 我的奖金问题是:如何将我的120多个静态行合并到一个基本上完成同样事情的plist中,除了编辑SB以添加新行,我只需要添加到的plist?

1 个答案:

答案 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来做这些事情。你最好在开始时改为另一种形式。否则,当你意识到你真的需要改变时,为时已晚,你需要重写许多代码。