silyevsk 的例子非常好……但是,六个月后,iOS 8 出现了,它不再正常工作了。
现在,您需要寻找一个名为“ _UITableViewCellActionButton
”的子视图并设置它的背景颜色。
下面是我在我的应用程序中使用的 silyevsk 代码的修改版本。
在我的某些UITableView
单元格上,我不希望用户能够滑动删除,但我确实希望在他们滑动时出现一些东西(挂锁图标)。
为此,我在bReadOnly
UITableViewCell 类中添加了一个变量
@interface NoteTableViewCell : UITableViewCell
. . .
@property (nonatomic) bool bReadOnly;
-(void)overrideConfirmationButtonColor;
@end
我将 silyevsk 的代码添加到我的 .m 文件中:
- (UIView*)recursivelyFindConfirmationButtonInView:(UIView*)view
{
for(UIView *subview in view.subviews) {
if([NSStringFromClass([subview class]) rangeOfString:@"UITableViewCellActionButton"].location != NSNotFound)
return subview;
UIView *recursiveResult = [self recursivelyFindConfirmationButtonInView:subview];
if(recursiveResult)
return recursiveResult;
}
return nil;
}
-(void)overrideConfirmationButtonColor
{
if (!bReadOnly)
return;
dispatch_async(dispatch_get_main_queue(), ^{
UIView *confirmationButton = [self recursivelyFindConfirmationButtonInView:self];
if(confirmationButton)
{
confirmationButton.backgroundColor = [UIColor lightGrayColor];
UIImageView* imgPadLock = [[UIImageView alloc] initWithFrame:confirmationButton.frame];
imgPadLock.image = [UIImage imageNamed:@"icnPadlockBlack.png"];
imgPadLock.contentMode = UIViewContentModeCenter; // Don't stretch the UIImage in our UIImageView
// Add this new UIImageView in the UIView which contains our Delete button
UIView* parent = [confirmationButton superview];
[parent addSubview:imgPadLock];
}
});
}
此外,我需要更改填充 的代码UITableView
,否则“删除”标签和挂锁图标会出现:
-(NSString*)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
Note* note = [listOfNotes objectAtIndex:indexPath.row];
if ( /* Is the user is allowed to delete this cell..? */ )
return @"Delete";
return @" ";
}
它仍然很丑陋,并且依赖于这样的假设,即当 iOS 9 出现时这一切都不会改变。