iOS 8之前使用如下方式自定义UITableView左划后显示的文字,不过该样式太单一了,而且只能显示一个:
- (nullable NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(3_0) __TVOS_PROHIBITED;
而从iOS 8开始UITableView的协议UITableViewDelegate增加了如下方法,可以自定义左划后显示多个,样式也有更多选择了:
- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;
实现该代理方法后,以下的这个代理方法就不执行了:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
UITableViewRowAction的定义如下:
NS_CLASS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED @interface UITableViewRowAction : NSObject <NSCopying>+ (instancetype)rowActionWithStyle:(UITableViewRowActionStyle)style title:(nullable NSString *)title handler:(void (^)(UITableViewRowAction *action, NSIndexPath *indexPath))handler;
@property (nonatomic, readonly) UITableViewRowActionStyle style;@property (nonatomic, copy, nullable) NSString *title;@property (nonatomic, copy, nullable) UIColor *backgroundColor; // default background color is dependent on style@property (nonatomic, copy, nullable) UIVisualEffect* backgroundEffect;@end
typedef NS_ENUM(NSInteger, UITableViewRowActionStyle) { UITableViewRowActionStyleDefault = 0, UITableViewRowActionStyleDestructive = UITableViewRowActionStyleDefault, UITableViewRowActionStyleNormal} NS_ENUM_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;
其中不修改backgroundColor时,backgroundColor的颜色是由style决定的,UITableViewRowActionStyleDestructive时是红色的删除样式,UITableViewRowActionStyleNormal时是灰色样式,类似于微信好友列表左划后的“备注”。
新闻热点
疑难解答