iOS TableView資料繫結的原則

來源:互聯網
上載者:User

資料繫結的原則
  

  如果你在寫表視圖控制器的子類代碼,大部分代碼都在 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 中的Binder 方法

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

...
}

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

  如果你使用系統預設的 UITableViewCell 來顯示資料,我推薦把這個Binder 方法添加到 UITable-
ViewCell 的分類類(category class)上。

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

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.