如何在视图中绑定数据
Posted
技术标签:
【中文标题】如何在视图中绑定数据【英文标题】:How to bind data in View 【发布时间】:2015-08-05 15:25:58 【问题描述】:实际上有人问我这个问题,我也很想知道,如何将数据直接绑定到 UI 元素。我知道UITableview
有 Datasource 属性,但它不直接绑定数据。我们必须使用它的协议方法来绑定代码中的数据。
有没有其他方法可以将数据绑定到视图,或者这是否可能?在.Net gridview中,我们可以直接将数据库中的数据绑定到gridview。
【问题讨论】:
【参考方案1】:更新:如果您的意思是将支持数据与 UI 元素同步,请阅读最后一段。
如果我正确理解您的问题,将数据直接绑定到视图将违反推荐的 MVC 模式。查看以下链接了解更多信息。
Why MVC?
[为什么用 MVC 而不是好的旧 ASP.NET?仍然不明白我为什么要走这条路?][2]
但是,如果您确实想直接绑定数据,那么没有什么可以阻止您,即使这可能是一个坏主意,除非用例是微不足道的。例如UITableViews 可用于静态单元格。如果预构建的 UI 元素没有直接将数据(不知道)绑定到它的规定,您可以制作一个类似的 UI 元素来达到此目的。
但是,与通过首选方法向现有元素提供数据相比,构建这样的元素需要更多的努力。
通过直接绑定数据,如果您的意思是通过接口构建器提供数据,那么您就不走运了。在 Cocoa(用于 OS X 应用程序开发)中,有一个称为 Bindings 的东西,它可以帮助您将 UI 元素与支持数据同步。但是在ios中没有这样的事情。但是你可以在某种程度上使用 Key - Value - Observing 来实现这一点。 此外,为什么 iOS 可能没有这样的绑定可能在这里得到部分回答: Is there any technical/conceptual reason why iOS does not support Cocoa Bindings?。 如果您需要此类功能,请检查此:Is there any data binding mechanism available for iOS?
【讨论】:
谢谢拉克什。!是的,我也有同样的想法,因为这个问题是在面试中被问到的,所以我发布这个问题是否可能?感谢您的澄清... 没问题。也检查最后一段。我已经更新了答案。 是的,Rakesh,我认为这是他们想要的答案..! 酷,如果您认为这是您问题的正确答案,请接受它作为答案 是的,为什么不……谢谢【参考方案2】:虽然它不完全绑定,但我使用 didSet 属性观察器来更新 UI 元素,如下所示:
var label: UILabel?
var labelText = "Change me."
didSet
label?.text = labelText
假设您已经在某个地方适当地初始化了标签。我相信这是你在 iOS 中最接近的。
【讨论】:
感谢 Roman 的回答,但是 KVO 可以在某些扩展上实现数据绑定。以上是关于如何在视图中绑定数据的主要内容,如果未能解决你的问题,请参考以下文章