UITableView沒資料時使用者提示如何做?

2021-07-14 20:40:28 字數 2439 閱讀 2086

字數876

閱讀3753

喜歡149

最近專案在大改,把之前很多的業務功能進行修改。在看到之前同事的**時,他在處理在網路請求不到資料的時候,提示使用者沒有資料的**太不合理。先來看看他的**。

// 顯示無資料提示

- (void)shownodatalabel

if ([self

.datasource count] == 0)

else

}

以上**是同事他在控制器裡面定義乙個uilabel屬性_nodatalabel,把它新增在控制器的view上,預設這個_nodatalabel是隱藏的。每次在網路請求完成的時候,就呼叫上面的方法,這個方法會判斷資料來源陣列中有沒有資料,如果沒有資料,那麼_nodatalabel就會顯示,如果有資料該_nodatalabel就繼續隱藏。這樣做當然沒有問題,但是這樣做很不合理:

這是一種典型的面向過程的方法,沒有進行封裝,不便於維護

這樣的**沒有重複利用,所用到的地方,幾乎都是要拷貝乙份。

沒有很好的利用objective c這門程式語言的特性-分類。

導致控制器的**過多,不便於維護,mvc設計模式變成了massive viewcontroller。

那麼我是怎麼做的呢?利用objective c 的分類可以達到很好的效果,實際上蘋果公司的開發也是大量採用分類來做的。之前做homekit智慧型家居開發的時候,看了很多homekit的開發文件和homekit的demo,其中蘋果的demo很多地方都是利用catergory來做的。

做法如下:我們對uitabelview進行擴充套件,**如下。

// .h檔案

@import uikit;

@inte***ce

uitableview (emptydata)

//新增乙個方法

- (void) tableviewdisplaywitmsg:(nsstring *) message ifnecessaryforrowcount:(nsuinteger) rowcount;

@end

/// .m檔案

#import "uitableview+emptydata.h"

@implementation

uitableview (emptydata)

- (void) tableviewdisplaywitmsg:(nsstring *) message ifnecessaryforrowcount:(nsuinteger) rowcount

else

}@end

首先匯入標頭檔案

> #import "uitableview+emptydata.h"

uitableview的資料來源方法中進行呼叫就可以了。如果你的tableview有多個section,那麼可以在- (nsinteger)numberofsectionsintableview:(uitableview *)tableview方法中進行呼叫。

- (nsinteger)numberofsectionsintableview:(uitableview *)tableview

- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section

如果你的tableview只有乙個分組,那麼可以在- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section中進行呼叫

- (nsinteger)tableview:(uitableview *)tableview numberofrowsinsection:(nsinteger)section

效果如下:

simulator screen shot 2023年10月27日 下午3.27.26.png

只要你的用得到地方,直接匯入uitableview的分類就可以了。這樣做是不是很方便呢?

**寫多了,是不是要考慮偷懶一下呢?直接複製貼上,這種簡單粗暴的活是不是應該留給年輕人幹呢?

UITableView選中時顏色

cpp view plain copy 無色 cell.selectionstyle uitableviewcellselectionstylenone 藍色 cell.selectionstyle uitableviewcellselectionstyleblue 灰色 cell.selectio...

安卓data data沒資料的時候

1 如果在環境變數中設定了 d androiddevp adt bundle windows x86 64 20131030 sdk platform tools 就直接cmd就可以,如果沒有設定環境變數需要定位到這個目錄 2 如果要讀取某個專案下的sqlite 的資料庫 如 database na...

mysql有資料就更新,沒資料就插入

在很多專案中,我們需要對資料進行不斷的呼叫和更新,如果有新的資料過來,還要把它加入到資料庫中。其中非常重要的一種情況就是,我們不知道傳過來的資料是不是原本資料庫中就已經有了的記錄,所以我們常常需要先通過抓取資料,判斷是否存在,如果存在執行update,如果不存在執行insert,這樣就要進行兩次資料...