为Swift组织可重用ViewControl代码的好方法是什么?

时间:2017-09-19 17:22:36

标签: ios swift

我正在寻找为我的快速项目组织可重用代码的好主意。我想指出,我是快速移动开发的初学者。

例如滚动表视图到顶部/底部,显示对话框甚至转到另一个视图等等。

所有这些东西都包含3-6行相同的代码。几乎每个视图中都有相同的3-6行代码并不是特别好看。所以我想创建一个具有静态函数的类,我可以从每个视图调用它。例如滚动表:

func scrollTable(to position:UITableViewScrollPosition, ofTable tableView: UITableView){
        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(300)) {
            let numberOfSections = tableView.numberOfSections
            let numberOfRows = tableView.numberOfRows(inSection: numberOfSections-1)

            if numberOfRows > 0 {
                let indexPath = IndexPath(row: numberOfRows-1, section: (numberOfSections-1))
                tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
            }
        }
    }
  

代码基于scrollToRowAtIndexPath with UITableView does not work

这是一个好主意吗?可能有人可以推荐一些更好的东西。

2 个答案:

答案 0 :(得分:1)

通过编写UIViewController的扩展,可以将自定义方法及其实现注入到任何UIViewController子类中。

答案 1 :(得分:1)

此功能中的所有内容都是本地的,所以它只是一个功能。您可以将该函数提取到自己的文件中并在任何地方使用它。没有必要让它静止。那说(并且没有太多关于这是否是一个好的功能的意见),在Swift中它通常是一个扩展:

extension UITableView {
    func scroll(to position: UITableViewScrollPosition) {
        DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(300)) {
            let numberOfRows = numberOfRows(inSection: numberOfSections-1)

            if numberOfRows > 0 {
                let indexPath = IndexPath(row: numberOfRows-1, section: (numberOfSections-1))
                scrollToRow(at: indexPath, at: .bottom, animated: true)
            }
        }
    }
}

(这是一个奇怪的函数,因为它似乎忽略了它的position参数,所以我认为它应该在某种程度上重写。但即便如此,如果你想要一个可重用的函数,这是基本的方法。)