在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS中保持TableView代碼整潔和結構清晰的方法

大小:0.2 MB 人氣: 2017-09-25 需要積分:1

  導語

  TableView 是iOS app 中最常用的控件,許多代碼直接或者間接的關聯到table view任務中,包括提供數據、更新tableView、控制tableView行為等等。下面會提供保持tableView代碼整潔和結構清晰的方法。

  UITableViewController vs. UIViewController

  TableViewController的特性

  table view controllers可以讀取table view的數據、設置tabvleView的編輯模式、反應鍵盤通知等等。同時Table view controller能夠通過使用UIRefreshControl來支持“下拉刷新”。

  Child View Controllers

  tableViewController也可以作為child view controller添加到其他的viewController中,然后tableViewController會繼續管理tableView,而parentViewController能管理其他我們關心的東西。

  -(void)addDetailTableView

  {

  DetailViewController *detail = [DetailViewController new];

  [detail setup];

  detail.delegate = self;

  [self addChildViewController:detail];

  [detail setupView];

  [self.view addSubview:detail.view];

  [detail didMoveToParentViewController:self];

  }

  如果在使用以上代碼時,需要建立child View controller 和 parent view controller之間的聯系。比如,如果用戶選擇了一個tableView里的cell,parentViewController需要知道這件事以便能夠響應點擊時間。所以最好的方法是table view controller定義一個協議,同時parent view controller實現這個協議。

  @protocol DetailViewControllerDelegate

  -(void)didSelectCell;

  @end

  @interface ParentViewController () 《DetailViewControllerDelegate》

  @end

  @implementation ParentViewController

  //。。.。

  -(void)didSelectCell

  {

  //do something.。。

  }

  @end

  雖然這樣會導致view controller之間的頻繁交流,但是這樣保證了代碼的低耦合和復用性。

  分散代碼

  在處理tableView的時候,會有各種各樣不同的,跨越model層、controller層、view層的任務。所以很有必要把這些不同的代碼分散開,防止viewController成為處理這些問題的“堆填區”。盡可能的獨立這些代碼,能夠使代碼的可讀性更好,擁有更好的可維護性與測試性。

  這部分的內容可以參考《iOS開發 簡化view controller》,而在tableView這一章中,將會專注于如何分離view和viewController

  消除ModelObeject和Cell之間的隔閡

  在很多情況下,我們需要提交我們想要在view層展示的數據,同時我們也行維持view層和model層的分離,所以tableView中的dateSource常常做了超額的工作:

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  {

  Cell *cell = [tableView dequeueReusableCellWithIdentifier:@“Cell”];

  [cell setup];

  NSString *text = self.title;

  cell.label.text = text;

  UIImage *photo = [UIImage imageWithName:text];

  cell.photoView.image = photo;

  }

  這樣dataSorce會變得很雜亂,應該將這些東西分到cell的category中。

  @implementation Cell (ConfigText)

  -(void)configCellWithTitle:(NSString *)title

  {

  self.label.text = title;

  UIImage *photo = [UIImage imageWithName:title];

  cell.photoView.image = photo;

  return cell;

  }

  這樣的話dataSource將會變得十分簡單。

  -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  {

  Cell *cell = [tableView dequeueReusableCellWithIdentifier:@“Cell”];

  [cell configCellWithTitle:self.title];

  return cell;

  }

  復用cell

  其實還可以更進一步,讓同一個cell變得可以展示多種的modelObject。首先需要在cell中定義一個協議,想要在這個cell中展示的object必須遵守這個協議。然后可以修改分類中config method來讓object來遵守這個協議,這樣cell就能適應不同的數據類型。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 国产精品一级香蕉一区 | 男人日女人的网站 | 国产伦精品一区二区三区在线观看 | 女人的逼毛片 | 欧美性色xo影院在线观看 | 国产成人综合自拍 | 精品国产乱码一区二区三区 | 久久久精品免费热线观看 | 极品吹潮视频大喷潮tv | 免费边摸边吃奶边叫床视频gif | 久久99热久久精品99 | 四虎最新永久在线精品免费 | 美女扒开尿口给男人爽免费视频 | 在线播放国产一区 | 日韩亚洲人成在线综合日本 | 成人看的一级毛片 | 伊人久久综合成人亚洲 | xxxx曰本 | 天天操天天插天天射 | 四虎综合九九色九九综合色 | 老师办公室高h文小说 | 欧美影院一区二区三区 | 在线免费视频一区二区 | 欧美激情区 | 亚洲午夜免费视频 | 日本三级成人午夜视频网 | 婷婷色综合久久 | 国产a三级三级三级 | 亚洲色图在线观看视频 | 人人九九精品 | videossexotv极度另类高清 | 婷婷香蕉 | 一级特黄国产高清毛片97看片 | 九九99视频在线观看视频观看 | 日本三级2018亚洲视频 | 亚欧色 | 夜夜爽天天狠狠九月婷婷 | h网站在线免费观看 | 国产做a爰片久久毛片 | 一级做a爰片久久毛片毛片 一级做a爰片久久毛片美女图片 | 日本亚洲一区二区 |