iOS TableView數據綁定的原則


數據綁定的原則
  

  如果你在寫表視圖控制器的子類代碼,大部分代碼都在 UITableViewDelegte UITableView-DataSource 方法中。我們將注意力聚焦在如何編寫簡潔的方法代碼來解決問題上。cellForRowAtIndexPath 方法中經常會有為每一個表單元的特定 UI 元素設置值的代碼。為表單元中 UI 元素設置 值的最佳方法是將代碼移到別處。現在應該將它移到哪里呢?這要看你使用的是哪一類自定義表單 元。根據你應用要做到的功能,表視圖需要與相關的數據建立聯系。

  這種技術通常稱為數據綁定(data binding),在 iOS 中並不怎么被重視,至少與 Mac 比較起來是 這樣。綁定數據的最好辦法是將你的數據模型對象傳遞到自定義的表視圖單元並讓其綁定數據。

  我們根據關聯數據的方式將表視圖單元分為三種類型。第一類是 UITableViewCell 的子類,它 是用來顯示特定類型數據的自定義表單元,一般情況下都與應用的特定信息綁定。RSS 閱讀器中展示 推送信息的 FeedCell 就是一個例子。

  第二類的作用與蘋果公司的 UITableViewCell 實現類似。你創建指定樣式的表單元,這些表單 元可以在其他類或工程中用來顯示多種類型的數據模型。舉個例子,你可以創建像 MyTableViewSwitchCell 這種可以顯示標題文本、UISwitch 開關,或像 MyTableViewInputCell 這種可以顯示標題文本以及顯示數據項 UITextField 文本框的通用類。

  第三類表單元就是UIKit框架提供的原生UITableViewCell。無論是哪一種類型,都要盡量把 數據綁定代碼移到表單元自身中。

  下面是第一類的情況,它簡單而直觀。在 FeedCell 中編寫接收模型對象(作為參數)的方法 並設置 Feed 模型對象的值給特定 UI 元素。也就是說,將你的數據綁定代碼移到(UITableViewCell 的子類)FeedCell 中。比方說,在 RSS 閱讀器應用中,FeedCell 公用方法看起來應該像下面 這樣:

FeedCell 中的綁定方法

-(void) bind:(Feed*) feedToBeDisplayed {
self.titleLabel.text = feedToBeDisplayed.text; self.timeStampLabel.text = feedToBeDisplayed.modifiedDateString;

... }

  我們並不在視圖控制器數據源方法 cellForRowAtIndexPath 中寫代碼,而是將其移到了 UITableViewCell 的子類中。這意味着如果之后需要修改表單元的格式(比如要給 Feed 模型對象和 FeedCell 添加作者名信息時),你便可以在那里(一個地方)執行操作了。

  如果你使用系統默認的 UITableViewCell 來顯示數據,我推薦把這個綁定方法添加到 UITable- ViewCell 的分類類(category class)上。

  第二種情況,你擁有多個使用同一 UITableViewCell 表單元的模型。我建議創建多個分類類, 每個模型一個;舉個例子,創建 UITableViewCell+Feed.h/m 文件以顯示推送信息,或是創建 UITableView- Cell+Subscription.h/m 文件以在同一表單元上顯示訂閱信息。給綁定方法命名的時候需要小心謹慎。如 果分類包含一個重復的方法名稱,它將會覆蓋前面定義的方法,這種重寫的發生是沒有定義順序的。 我建議用 bind<ModelClassName>這樣的方式給它們命名,這樣更易讀和易於理解。比如說像 bindFeed(Feed*)bindSubscription:(Subscription*)這樣的命名約定。

  第三類情況,你擁有一個像 MyTableViewSwitchCell 這樣的通用自定義表單元。在這種情況 下,你也可以使用之前所說的技術。為通用自定義表視圖單元添加分類方法。

  通常,你可能會在多個表和多個視圖控制器內重復使用同樣的 FeedCell 單元格。將與數據綁定 相關的代碼移出表視圖控制器(或其他任意通用的視圖控制器)可以減少控制器內的代碼混亂情況並 簡化代碼維護工作。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM