這篇文章主要介紹了ios UITableView如何實現(xiàn)無數(shù)據(jù)加載占位圖片,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設、域名、網(wǎng)絡空間、網(wǎng)站托管、企業(yè)網(wǎng)站設計、惠來網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。具體如下:
國際慣例,上效果圖
該效果的實現(xiàn)主要是使用runtime的交叉方法實現(xiàn),將tableView的reloadData與自定義的kk_reloadData交換。新建tableView的Category。
交換方法主要代碼
+ (void)swizzleInstanceSelector:(SEL)originalSel WithSwizzledSelector:(SEL)swizzledSel { Method originMethod = class_getInstanceMethod(self, originalSel); Method swizzedMehtod = class_getInstanceMethod(self, swizzledSel); BOOL methodAdded = class_addMethod(self, originalSel, method_getImplementation(swizzedMehtod), method_getTypeEncoding(swizzedMehtod)); if (methodAdded) { class_replaceMethod(self, swizzledSel, method_getImplementation(originMethod), method_getTypeEncoding(originMethod)); }else{ method_exchangeImplementations(originMethod, swizzedMehtod); } }
交換reloadData
+ (void)load { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [self swizzleInstanceSelector:@selector(reloadData) WithSwizzledSelector:@selector(kk_reloadData)]; }); }
kk_reloadData方法,先檢查是否有數(shù)據(jù),再次kk_reloadData方法此時已使用runtime的交換方法則則實際上調(diào)用的是系統(tǒng)的reloadData方法。
- (void)kk_reloadData { [self kk_checkEmpty]; [self kk_reloadData]; }
kk_checkEmpty方法
- (void)kk_checkEmpty { BOOL isEmpty = YES; idsrc = self.dataSource; NSInteger sections = 1; if ([src respondsToSelector:@selector(numberOfSectionsInTableView:)]) { sections = [src numberOfSectionsInTableView:self]; } for (int i = 0; i < sections; i++) { NSInteger rows = [src tableView:self numberOfRowsInSection:i]; if (rows) { isEmpty = NO; } } if (isEmpty) {//數(shù)據(jù)為空,在這里添加視圖 }else{//數(shù)據(jù)不為空,在這里一處視圖 } }
為了降低代碼的侵入,可以給tableView動態(tài)添加一個View屬性即是占位圖視圖。
@property (nonatomic, strong) UIView *placeHolderView;
- (void)setPlaceHolderView:(UIView *)placeHolderView { objc_setAssociatedObject(self, @selector(placeHolderView), placeHolderView, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } - (UIView *)placeHolderView { return objc_getAssociatedObject(self, @selector(placeHolderView)); }
kk_checkEmpty的
if (isEmpty) {//數(shù)據(jù)為空,在這里添加視圖 }else{//數(shù)據(jù)不為空,在這里一處視圖 }
修改為
if (isEmpty) { [self.placeHolderView removeFromSuperview]; [self addSubview:self.placeHolderView]; }else{ [self.placeHolderView removeFromSuperview]; }
以后使用的時候只需設置tableView的placeHolderView屬性即可
_tableView.placeHolderView = [[UIView alloc] init];
打完收工
感謝你能夠認真閱讀完這篇文章,希望小編分享的“ios UITableView如何實現(xiàn)無數(shù)據(jù)加載占位圖片”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)建站,關注創(chuàng)新互聯(lián)網(wǎng)站建設公司行業(yè)資訊頻道,更多相關知識等著你來學習!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。