UITableView with:具有动态内容和动态单元格的静态单元格

时间:2015-04-15 20:54:35

标签: ios iphone uitableview swift

我有一个UITableView,它总是有4个部分。第一部分总是有1行,第二部分总是有3行。然后第3和第4部分可以有任意数量的行。虽然前两个部分基本上是静态单元格,但它们中的内容会发生变化。

前两个部分是我必须开始的所以我只是在TableViewController中直接使用带有插座的静态单元格。然后我添加了两个可以有任意行数的部分。

我发现要做到这一点,现在我必须将整个表视为使用动态原型,我现在必须为每个单元实现所有委托/数据源类。除此之外,我不能再直接在tableViewController中拥有我的插座(即使是前两个部分),而是为它们创建自定义子类,以便我可以更改其内容。

这看起来很愚蠢,因为它们非常简单。有没有更好的方法可以做到这一点?也许我可以在TVC中有两个tableViews,一个是静态的,静态单元的处理方式相同,还有一个使用动态原型的方法?如果这是最好的方式,我应该如何实现?在处理多个TableView之前,我从未实现过TableViewController。

作为参考,“视图”是一个配置文件视图,其中包含有关此人员配置文件的简单数据。前两部分只是个人的图片,姓名,电子邮件和说明。

第二部分包含1)应用中收藏的帖子列表。 2)用户创建的帖子列表。

以下是显示视图的2张图片:

profile view top profile view bottom

2 个答案:

答案 0 :(得分:2)

不,幸运的是Apple确实为UITableViewController添加了静态表格单元格,但道路就此结束了。如果要开始修改内容,则需要切换到“真正的”UITableView,设置数组并正确处理单元格。

2个选项。

为静态单元格内容创建IBOutlets并直接更改对象。

...或

使用UITableView委托和数据源设置tableView委托方法并更改内容。

class CustomCell: UITableViewCell {
    @IBOutlet weak var labelName: UILabel!
}

参考有关从viewController获取按钮的indexPath的注释,请查看以下代码。基本上我创建了一个包含indexPathForView函数的UITableView扩展。这样,您可以获得按下的精确视图(按钮)来处理UIViewController中的任何操作。我更喜欢这种技术,而不是在单元格上创建协议/委托,然后回调到viewController。

@IBAction func pressedItem(sender: AnyObject) {
    let button = sender as! UIButton
    var indexPath = self.tableView.indexPathForView(button)!
    let object = self.arrayOfObjects[indexPath.row]
    // Now you can fire any action and have it related to that specific cell

//创建一个BlackBExtensions.swift类来保存您的便利扩展,例如

// MARK: - UITableView
extension UITableView {
    func indexPathForView (view : UIView) -> NSIndexPath? {
        let location = view.convertPoint(CGPointZero, toView:self)
        return indexPathForRowAtPoint(location)
    }
}
//

我可以补充一下, EXTENSIONS ROCK !!!

答案 1 :(得分:0)

使用静态内容设置标题视图可能已足够,而不是使用两个tableView。可能在同一个且只有一个表视图控制器内部很容易。但它也可以单独完成,然后在下面的表视图中使用动态内容,所有这些都在一个简单的视图控制器中