91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ios UITableView如何實現無數據加載占位圖片

發布時間:2021-07-09 09:38:15 來源:億速云 閱讀:133 作者:小新 欄目:移動開發

這篇文章主要介紹了ios UITableView如何實現無數據加載占位圖片,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

具體如下:

國際慣例,上效果圖

ios UITableView如何實現無數據加載占位圖片

該效果的實現主要是使用runtime的交叉方法實現,將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方法,先檢查是否有數據,再次kk_reloadData方法此時已使用runtime的交換方法則則實際上調用的是系統的reloadData方法。

- (void)kk_reloadData {
  [self kk_checkEmpty];
  [self kk_reloadData];
}

kk_checkEmpty方法

- (void)kk_checkEmpty {
  BOOL isEmpty = YES;
  id<UITableViewDataSource> src = 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) {//數據為空,在這里添加視圖
  }else{//數據不為空,在這里一處視圖
  }
}

為了降低代碼的侵入,可以給tableView動態添加一個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) {//數據為空,在這里添加視圖
}else{//數據不為空,在這里一處視圖
}

修改為

if (isEmpty) {
    [self.placeHolderView removeFromSuperview];
    [self addSubview:self.placeHolderView];
  }else{
    [self.placeHolderView removeFromSuperview];
  }

以后使用的時候只需設置tableView的placeHolderView屬性即可

_tableView.placeHolderView = [[UIView alloc] init];

打完收工

感謝你能夠認真閱讀完這篇文章,希望小編分享的“ios UITableView如何實現無數據加載占位圖片”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

冕宁县| 宽城| 红河县| 齐齐哈尔市| 乌海市| 宣武区| 财经| 万山特区| 九龙县| 呼伦贝尔市| 东光县| 都匀市| 河北区| 莒南县| 四川省| 五台县| 射阳县| 盐边县| 晋宁县| 阿克陶县| 乌拉特后旗| 炉霍县| 临潭县| 罗城| 景泰县| 兴化市| 闵行区| 杭锦旗| 贵德县| 河南省| 阿巴嘎旗| 朝阳区| 高雄县| 招远市| 图木舒克市| 延庆县| 石棉县| 杭锦后旗| 桂东县| 巴里| 长兴县|