在前面的文章里面已經(jīng)寫過了“UITableView基礎(chǔ)”掀序,所以這篇里面就不再對這里面的內(nèi)容進行介紹谍婉。如果有幸去瞄一眼的纳令,可以通過文章下面的拓展鏈接傳送門去看柠贤。&
今天重點聊一聊UITableView中經(jīng)常使用到的代理方法及屬性。本文不是工具箱雷滋,所以不會將所有的屬性和方法都寫下來噢不撑。只是總結(jié)經(jīng)常使用到的。太完整的也記不住晤斩,真的是要用的時候臨時翻一下.h文件看看也行焕檬。
1. 常用屬性
1.1 分隔線屬性
屬性名稱 | 數(shù)值 | 作用 |
---|---|---|
separatorStyle | UITableViewCellSeparatorStyle | 分割線樣式 |
separatorColor | UIColor | 分隔線顏色 |
1.2 cell被選中的屬性
屬性名稱 | 數(shù)值 | 作用 |
---|---|---|
allowsSelection | BOOL | 允許選中 |
allowsMultipleSelection | BOOL | 允許多選 |
indexPathsForSelectedRows | NSArray < NSIndexPath *> | 獲取當前選中cell的indexPaths |
indexPathsForVisibleRows | NSArray < NSIndexPath *> | 當前可見行數(shù) |
-
allowsSelection
:BOOL類型,一是說說這一個cell是否可以被選中澳泵。在某種情況下实愚,我們希望點擊cell的時候不需要做出任何的反應,就可以修改這個屬性兔辅。 -
allowsMultipleSelection
:需要進行多行選擇的時候就要將此設(shè)置為YES
腊敲。 -
indexPathsForSelectedRows
:這里返回的是包含了indexPath
的數(shù)組噢,因為要考慮到是多行選中的情況维苔。知道了這個屬性之后碰辅,不要一說獲取選中的cell的indexPath就只會用代理方法。& -
indexPathsForVisibleRows
:這個方法其實并不太經(jīng)常使用介时,但是很能提升逼格没宾。這個屬性也是一個數(shù)組凌彬,它裝著目前屏幕上可見的cell的indexPath集合。在做兩級菜單聯(lián)動的時候可能會需要用到循衰。
2. 進階的常用代理方法
神馬滾動到指定的cell铲敛,設(shè)置cell的高度,設(shè)置header羹蚣、footer的高度等等這些方法就不再說了原探。
2.1 最最常用的方法:選中指定的cell
//選中cell
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
2.2 編輯模式
- 開啟支持編輯模式
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
- 修改點擊編輯后,每個cell前方的icon
//修改上圖的圖標
- (UITableViewCellEditingStyle) tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
- 修改上圖圖標對應的執(zhí)行方法
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
2.3 拖拽排序模式
重要:開啟支持拖拽排序的前提是:開啟支持編輯模式顽素。
- 開啟拖拽模式
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}
- 拖拽之后對應的執(zhí)行方法
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
```
//修改刪除按鈕文字
- (NSString *) tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
return @"刪除";
}
##2.4 自定義cell左滑事件
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2248583-728eb64caa005450.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
##2.5 修改cell左滑文字
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"haha";
}
#3. 四種刷新tableView的方法
// 新增表格數(shù)據(jù)
[tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];
// 刪除表格數(shù)據(jù)
[tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationRight];
// 局部刷新指定的行
[tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];
// 刷新全部表格數(shù)據(jù)咽弦,如果能夠準確確定被修改的數(shù)據(jù)行,就不要用此方法
[tableView reloadData];
#4. tableViewCell排序
##4.1 cell交換排序
- 在cell拖拽對應的執(zhí)行方法中進行胁出。
[self.contactArray exchangeObjectAtIndex:fromIndexPath.row withObjectAtIndex:toIndexPath.row];
##4.2 cell順序排序
- 依舊還是在cell拖拽對應的執(zhí)行方法中進行型型。
// 獲取選中的數(shù)組。刪除后全蝶,插入到相應的行
GMContact *tempContact = self.contactArray[fromIndexPath.row];
[self.contactArray removeObjectAtIndex:fromIndexPath.row];
[self.contactArray insertObject:tempContact atIndex:toIndexPath.row];
##4.3 開了編輯模式后闹蒜,在編輯模式下插入一條cell
- 需要在編輯模式下,修改icon執(zhí)行方法中寫入抑淫。
-
(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//刪除數(shù)組對應的數(shù)據(jù)
[self.contactArray removeObjectAtIndex:indexPath.row];//刪除對用cell
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
//插入數(shù)據(jù)
GMContact * contact = [[GMContact alloc] init];
contact.name = @"曲大帥帥";
contact.number = @"110119120";//往數(shù)組中插入 [self.contactArray insertObject:contact atIndex:indexPath.row + 1]; //插入cell NSIndexPath * inserIndex = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:0]; //插入動畫绷落,不然顯得很突兀 [tableView insertRowsAtIndexPaths:@[inserIndex] withRowAnimation:UITableViewRowAnimationFade]; }
}