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出現時不會全部改變的假設。
我不認爲這是可能的沒有自定義的UITableViewCell子類。你爲什麼確定這有可能? – DrummerB
@DrummerB我讀了很多關於這個按鈕的定製,顯然我的單元格是自定義的,我已經繼承了UITableViewCell,但我不知道如何簡單地改變顏色,大多數時候人們想要改變動畫或整體這個按鈕的視圖。 –
@DrummerB我不想改變任何行爲,只是顏色。 –