MVVM设计模式(二)

作者: Harely | 来源:发表于2017-12-17 12:03 被阅读9次

    View-Model的连接

    连接一:用对应的 view-model 来初始化视图控制器:

    MYTwitterUserProfileViewController *profileViewController = [[MYTwitterUserProfileViewController alloc] initWithViewModel: userProfileViewModel];

    链接二:有时你无法在初始化时将 view-model 传入, 比如在 storyboard segue 或 cell dequeuing 的情况下. 这时你应该在讨论中的视图(控制器)中暴露一个公有可写的 view-model 属性.

    MYTwitterUserCell *cell = [self. tableView dequeueReusableCellWithIdentifier: @"MYTwitterUserCell" forIndexPath: indexPath];

    // grab the cell view-model from the vc view-model and assign itcell. viewModel = self. viewModel. tweets[indexPath. row];

    连接三:我们可以在程序调用前传入 view-model, 比如init和viewDidLoad, 我们可以从view-model 的属性初始化所有 UI 元素的状态.


    问题:

    当”go” 按钮在什么时候可用了怎么办?

    当用户标签和头像在什么时候从网络上下载并填充了怎么办?

    当输入框改变时,我们如何更新数据?

    惯性思维:

    a. 可以将视图控制器暴露给 view-model, 以便于当相关数据变化或类似事件发送时它可以调用一个 “updateUI” 方法. (别这么干. )

    b. 在 view-model 上将视图控制器作为一个委托?当 view-model 内容有变化时发个通知?(不不不不. )

    解决问题的思路:

    视图控制器会感知一些变化的发生. 我们可以使用从 UITextfield 得来的委托方法在每当有字符变化时通过检查 view-model 来更新按钮的状态.

    这种方法解决的场景是在只有再文本框发生变化时才会影响 view-model 中的isUsernameValid值. 假使还有其他变量/动作改变isUsernameValid的状态将会怎么样?对于 view-model 中的网络调用会怎么样?或许我们该为 view-model 上的方法加一个完成后回调处理, 这样我们此时就可以更新 UI 的一切东西了?使用珍贵而笨重的 KVO 方法怎么样?


    进入ReactiveSwift中

    相关文章

      网友评论

        本文标题:MVVM设计模式(二)

        本文链接:https://www.haomeiwen.com/subject/qfsywxtx.html