系統(tǒng)自帶的多選
// 允許在編輯模式進(jìn)行多選操作
self.tableView.allowsMultipleSelectionDuringEditing = YES;
- 當(dāng)點(diǎn)擊編輯的時(shí)候設(shè)置tableView的編輯模式
[self.tableView setEditing:YES animated:YES];
- 如果你想讓一個(gè)按鈕來控制tableView的編輯和不編輯的狀態(tài)可以這么寫
[self.tableView setEditing:!self.tableView.isEditing animated:YES];
- 完成以上幾步就可以選擇想要?jiǎng)h除的cell了
- 但是如果你想刪除選中的數(shù)據(jù)要實(shí)現(xiàn)下面的方法
- (void)remove
{
// 獲得所有被選中的行
NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];
// 便利所有的行號(hào)
NSMutableArray *deletedDeals = [NSMutableArray array];
for (NSIndexPath *path in indexPaths) {
[deletedDeals addObject:self.deals[path.row]];
}
// 刪除模型數(shù)據(jù)
[self.deals removeObjectsInArray:deletedDeals];
// 刷新表格 一定要刷新數(shù)據(jù)
[self.tableView reloadData];
}
# 說明:self.deals 是存放模型的數(shù)組
自定義cell多選
- 首先開發(fā)模式是MVC思想(如果不是MVC思想往后看)
- 給模型增加一個(gè)屬性
- 這個(gè)屬性是用來顯示或者隱藏 打鉤 的圖片的
/** 狀態(tài)量標(biāo)識(shí)有無被打鉤 */
@property (assign, nonatomic, getter=isChecked) BOOL checked;
- 然后再給cell賦值的時(shí)候判斷cell子控件打鉤圖片的顯示隱藏
// 設(shè)置打鉤控件的顯示和隱藏
self.checkView.hidden = !deal.isChecked;
- 最后一步就是 給模型的checked屬性賦值
- 在tableView的點(diǎn)擊方法中實(shí)現(xiàn)下面代碼
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// 取消選中這一行
[tableView deselectRowAtIndexPath:indexPath animated:YES];
// 模型的打鉤屬性取反
Deal *deal = self.deals[indexPath.row];
deal.checked = !deal.isChecked;
// 刷新表格
[tableView reloadData];
# 說明:Deal 是模型數(shù)據(jù) self.deals是存放模型數(shù)據(jù)的數(shù)組
自定義cell多選(不是MVC開發(fā)模式)
- 首先聲明一個(gè)可變數(shù)組用來存放點(diǎn)擊cell的indexPath
@property (nonatomic, strong) NSMutableArray *indexPaths;
# 并且進(jìn)行懶加載
- (NSMutableArray *)indexPaths
{
if (!_indexPaths) {
_indexPaths = [NSMutableArray array];
}
return _indexPaths;
}
//mr_tb 未選中圖片 xz_tb選中圖片
#默認(rèn)是沒有任何選中的cell的
cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
//多選
for (NSIndexPath * index in self.indexPaths)
{//遍歷數(shù)組里面的索引 和 當(dāng)前索引是否一致
if (index == indexPath)
{//改變?cè)谶x擇的數(shù)組里面的記錄
cell.imageView.image = [UIImage imageNamed:@"xz_tb"];//選中
break;
}
}
- 在tableView的點(diǎn)擊代理方法中實(shí)現(xiàn)下面方法
//取出當(dāng)前cell
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIImage * image = [UIImage imageNamed:@"xz_tb"];
if ([cell.imageView.image isEqual:image])
{//如果為選中 變成未選中
cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
[self.indexPaths removeObject:indexPath];
}else{//如果為未選中 變成選中
cell.imageView.image = [UIImage imageNamed:@"xz_tb"];
[self.indexPaths addObject:indexPath];
}
- 如果你想控制多選的個(gè)數(shù)的話 你可以這么寫
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIImage * image = [UIImage imageNamed:@"xz_tb"];
if ([cell.imageView.image isEqual:image])
{//如果為選中
cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
[self.indexPaths removeObject:indexPath];
}else{
if (self.indexPaths.count >= 2)
{//如果當(dāng)前數(shù)組存儲(chǔ)的索引超過兩個(gè)直接返回
[self showMessage:@"最多只能選擇兩個(gè)"];
return;
}else{
cell.imageView.image = [UIImage imageNamed:@"xz_tb"];
[self.indexPaths addObject:indexPath];
}
}
- 整體的思想就是當(dāng)你選中某一個(gè)cell的時(shí)候取出當(dāng)前cell的圖片 和 選中圖片進(jìn)行對(duì)比 如果一樣 就把當(dāng)前cell的iamge變成另外一個(gè)圖片 (當(dāng)變成未選中的時(shí)候 要把在數(shù)組里面的indexPath移除,當(dāng)變成選中的時(shí)候設(shè)置選中的圖片 并且把當(dāng)前選中的indexPath保存在數(shù)組中)
自定義cell單選
- 在tableView的點(diǎn)擊dialing方法中寫下下面代碼
for (int i = 0; i < self.deals.count; i++) {
Deal *deal = self.deals[i];
if (i != indexPath.row) {
deal.checked = YES;
}else{
deal.checked = NO;
}
}
# Deal 是數(shù)據(jù)模型 self.deals 是存放數(shù)據(jù)模型的數(shù)組
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者