了解iOS子类化

时间:2015-04-22 23:28:52

标签: ios uitableview inheritance

我目前正在构建一个包含几个UIViewController并且每个UITableView的应用程序。每个表视图都将包含我作为UITableViewCell的子类创建的自定义单元格。

由于两个视图控制器的外观和功能非常相似,因此我为其他视图控制器创建了一个基类UITableView,以继承共享属性和方法。

但是,我不确定如何在每个中构建委托和数据源方法。例如,我希望自定义单元格具有当用户从右向左滑动时可用的操作,并且我希望两个视图控制器中的单元格具有相同的操作。我在每个视图控制器中实现了将操作添加到自定义表视图单元的代码:

// Enable the default swipe-to-delete functionality of the cells
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

}



func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {

    var likeAction = UITableViewRowAction(style: .Default, title: "Like") { (action, indexPath) -> Void in
        println("Beer added to \"Like\"")
        // Save the beer into the "Like" group
        tableView.setEditing(false, animated: true)

    }

    var tryAction = UITableViewRowAction(style: .Default, title: "Try") { (action, indexPath) -> Void in
        println("Beer added to \"Try\"")
        // Save the beer into the "Try" group
        tableView.setEditing(false, animated: true)
    }

    var dislikeAction = UITableViewRowAction(style: .Default, title: "Dislike") { (action, indexPath) -> Void in
        println("Beer added to \"Dislike\"")
        // Save the beer into the "Dislike" group
        tableView.setEditing(false, animated: true)
    }

    likeAction.backgroundColor = UIColor(red: 0.26, green: 0.74, blue: 0.69, alpha: 1)
    tryAction.backgroundColor = UIColor(red: 0.2, green: 0.25, blue: 0.29, alpha: 1)
    dislikeAction.backgroundColor = UIColor(red: 0.74, green: 0.38, blue: 0.33, alpha: 1)

    return [dislikeAction, tryAction, likeAction]
}

由于我希望将这些操作添加到视图控制器中的两个表视图中,我是否可以在基类中实现此方法并让两个子视图控制器的表视图继承这个?或者我是否需要在每个视图控制器中实现此方法,以便为其单元格提供功能?

当我想要共享功能的表视图位于不同的视图控制器中时,我对如何重用这些属于表视图的方法感到困惑。

编辑1

基类也符合UITableViewDelegate协议,因此其他视图控制器可以继承委托方法,因为它们的功能相同。如果某些东西需要一些不同的行为,那么我可以覆盖该方法。

编辑2 - 已解决

我最终搞清楚我想要完成的事情。我必须在我的基类中实现它,这使得滑动手势能够在我的自定义表视图单元格中显示操作按钮:

// Enable the default swipe-to-delete functionality of the cells
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

}

0 个答案:

没有答案