自iOS8開始琅锻,TableView支持多個(gè)左滑按鈕的顯示效果咙俩。如果只是簡(jiǎn)單的文字顯示效果,只需簡(jiǎn)單的幾行代碼即可輕松實(shí)現(xiàn)窒典。
1.簡(jiǎn)單左滑效果
實(shí)現(xiàn)基本的左滑效果十分簡(jiǎn)單蟆炊,只需重寫
UITableViewDataSource中的
- (void)tableView: commitEditingStyle: forRowAtIndexPath:
方法即可。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (UITableViewCellEditingStyleDelete == editingStyle)
{
[self.dataArr removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
}
}
當(dāng)然瀑志,顯示的文字是可以換的涩搓,需要重寫即可,返回值即為顯示的文字劈猪。
- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
注意:
1.刪除或添加都會(huì)回調(diào)此方法昧甘,故需要UITableViewCellEditingStyleDelete == editingStyle
的條件
2.重寫此方法會(huì)有左滑效果,點(diǎn)擊左滑出的按鈕則會(huì)調(diào)用此方法中的內(nèi)容战得,默認(rèn)左滑按鈕點(diǎn)擊是刪除充边。在手機(jī)為中文系統(tǒng)時(shí)Delete
會(huì)自動(dòng)變?yōu)?code>刪除字樣。
3.對(duì)tableview的row進(jìn)行增加或減少常侦,必須同時(shí)對(duì)數(shù)據(jù)源進(jìn)行改變做到一一對(duì)應(yīng)痛黎。
4.如果只需要部分才可以左滑予弧,則需要重寫
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
刮吧,返回YES表示可以左滑湖饱,反之不能左滑。
2.多按鈕左滑效果
當(dāng)需要左滑顯示多個(gè)按鈕時(shí)杀捻,上面的方法已經(jīng)不能滿足需求了井厌。但是API提供了另一個(gè)方法供我們使用(此方法iOS8后才可以使用)。
此時(shí)只需重寫
- (NSArray<UITableViewRowAction *> *)tableView: editActionsForRowAtIndexPath:
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewRowAction *action1 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"第一個(gè)" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath)
{
//刪除一行
[self.dataArr removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
}];
action1.backgroundColor = [UIColor greenColor];
UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Second" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath)
{
//什么都不做致讥,恢復(fù)原樣
[tableView setEditing:NO animated:YES];
}];
action2.backgroundColor = [UIColor orangeColor];
return @[action1,action2];
}
注意:
1.當(dāng)重寫此方法時(shí)commitEditingStyle
以及titleForDeleteConfirmationButtonForRowAtIndexPath
不會(huì)被調(diào)用仅仆。故實(shí)現(xiàn)此方法后,其他方法不必實(shí)現(xiàn)垢袱。
2.若不需要?jiǎng)h除某行墓拜,只需恢復(fù)原樣,調(diào)用[tableView setEditing:NO animated:YES];即可请契。因?yàn)樽蠡罂劝瘢瑃ableView的editing會(huì)自動(dòng)變?yōu)閅ES。
3.UITableViewRowAction只有一些簡(jiǎn)單屬性可以設(shè)置爽锥,比如背景顏色backgroundColor
涌韩。
4.返回的數(shù)組中,越靠前的元素顯示越靠右氯夷。
5.顯示的寬度和字?jǐn)?shù)會(huì)自動(dòng)適配臣樱,不需調(diào)整。