Android的ListView都是用setEmptyView,然後去設定塞進EmptyView的TextView,例如顏色、字體大小等。
且xml檔都要記得放android:id="@+id/empty"的TextView
iOS的做法如下
作法1:使用UITableView自身來呈現
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.myDataItems.count == 0) // 資料為空, 只需1個cell呈現"無資料"資訊, 故個數是1
return 1;
else
return self.myDataItems.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (self.myDataItems.count == 0) {
UITableViewCell *cell = [UITableViewCell new];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.textLabel.textAlignment = NSTextAlignmentCenter;
cell.textLabel.textColor = [UIColor lightGrayColor];
cell.textLabel.text = @"沒有資料";
return cell;
}
// 若資料不為空, 就自行實踐cell的呈現
static NSString *CellIdentifier = @"MyCustomCellIdentifier";
MyCustomCell *cell = (MyCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// 略...
return cell;
}
作法2:使用UILable客製化呈現
作法1因為用cell呈現,樣式有點難隨心所欲,例如想把"沒有資料"放在畫面正中央,這時候自行new一個UILabel會是比較快的選擇
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// 不需要額外撰寫 if (self.myDataItems.count == 0)要怎麼處理
return self.myDataItems.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// 不需要額外撰寫 if (self.myDataItems.count == 0)要怎麼處理, 本method只要專心處理有資料的cell要怎麼呈現即可
// 若資料不為空, 就自行實踐cell的呈現
static NSString *CellIdentifier = @"MyCustomCellIdentifier";
MyCustomCell *cell = (MyCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// 略...
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if([self.myDataItems count] == 0) {
//create a lable size to fit the Table View
UILabel *messageLbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, tableView.bounds.size.height)];
//set the message
messageLbl.text = @"沒有資料";
//center the text
messageLbl.textAlignment = NSTextAlignmentCenter;
//auto size the text
[messageLbl sizeToFit];
//set back to label view
tableView.backgroundView = messageLbl;
//no separator
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
return 0;
}
return 1;
}
參考資料 UITableView: Display Message In Empty Table View
沒有留言:
張貼留言