在列表和详细信息ViewController中重用相同的视图

时间:2017-01-14 13:13:51

标签: ios swift design-patterns model-view-controller mobile

我有一个常用的List-Detail应用程序。 TableView用于显示项目索引和详细信息ViewController显示单个项目以及更多详细信息。

List:

+-----------------+
|                 |
|     IMAGE 1     |
|                 |
+-----------------+
|button1  button2 |
|=================|
|                 |
|     IMAGE 2     |
|                 |
+-----------------+
|button1  button2 |
|=================|
|        .        |
|        .        |
|        .        |


Detail:
+-----------------+
|                 |
|     IMAGE 1     |
|                 |
+-----------------+
| some text       |
+-----------------+
|button1  button2 |  <= same actions/handlers as in list
|=================|

两者都有一个带有多个按钮的按钮栏(如,保存等)。如何重用这个按钮栏的逻辑?

2 个答案:

答案 0 :(得分:1)

您可能希望将这些函数(保存等)添加到包含数据的类(图像,文本等)中。然后,您可以从任何地方调用该函数,它也会执行相同的操作。例如:

class Post {
    var image: UIImage?
    var text: String?

    func save() {
        // Put your code here to save the 'Post'
    }

    func like() {
        // Put your code here to like the 'Post'
    }
}

对于您的自定义UIViewUITableViewCell,您可以使用protocolextension执行类似操作。例如:

protocol UpdateState {
    var myImageView: UIImageView? { get }
    var myTextLabel: UILabel? { get }
    func save()
    func like()
}

extension UpdateState {

    func save() {
        // Put your code here to save the 'Post'
        myTextLabel?.text = "New text after save"
        myImageView?.image = UIImage(named: "SavedImage")
    }

    func like() {
        // Put your code here to like the 'Post'
        myTextLabel?.text = "New text after like"
        myImageView?.image = UIImage(named: "NewImage")
    }
}

class Cell: UITableViewCell, UpdateState {
    @IBOutlet weak var myImageView: UIImageView?

    // This is here to conform to the UpdateState protocol
    var myTextLabel: UILabel? = nil
}

class View: UIView, UpdateState {
    @IBOutlet weak var myImageView: UIImageView?
    @IBOutlet weak var myTextLabel: UILabel?
}

答案 1 :(得分:0)

创建一个单独的按钮栏组件,在其中设置数据源,如果您确定在特定索引处要显示特定数量的按钮,那么将字典作为数据源,键将是索引,值将是另一个存储按钮标题的字典。您可以读取数据源并以编程方式在单独的按钮栏组件中创建按钮