簡體   English   中英

如何在Objective-C的UitableView中使UITableViewRowAction完全透明

[英]How to make UITableViewRowAction Completely Transparent in UitableView in Objective-C

我想使UITableViewRowAction透明,並且在我的Objective-C中的UITableViewCell滑動時,背景視圖應該可見。 我清除了所有背景顏色,但背景中仍然出現淺灰色。

這是我的代碼:

ViewController.h

#import <UIKit/UIKit.h>


    @interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>



    @property (nonatomic, strong) UITableView *MyCustomTableView;
    @property (nonatomic, strong)NSArray *MyTableViewData;
    @property (nonatomic, strong)UIImage *MyAppIconImage;
    @end

ViewController.m

#import "ViewController.h"
#import "MyTableViewCell.h"

static NSString *myCellID = @"myCellIdentifier";
@interface ViewController ()

@end

@implementation ViewController

@synthesize MyCustomTableView, MyTableViewData, MyAppIconImage;
- (void)viewDidLoad {
    [super viewDidLoad];
    UIGraphicsBeginImageContext(self.view.frame.size);
    [[UIImage imageNamed:@"SampleBg"] drawInRect:self.view.bounds];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    self.view.backgroundColor = [UIColor colorWithPatternImage:image];

    self.MyTableViewData = @[@{@"Title" : @"My TableView Title 1", @"Description" : @"My TableView Description 1"}, @{@"Title" : @"My TableView Title 2", @"Description" : @"My TableView Description 2"}, @{@"Title" : @"My TableView Title 3", @"Description" : @"My TableView Description 3"}, @{@"Title" : @"My TableView Title 4", @"Description" : @"My TableView Description 4"}, @{@"Title" : @"My TableView Title 5", @"Description" : @"My TableView Description 5"}, @{@"Title" : @"My TableView Title 6", @"Description" : @"My TableView Description 6"}, @{@"Title" : @"My TableView Title 7", @"Description" : @"My TableView Description 7"}, @{@"Title" : @"My TableView Title 8", @"Description" : @"My TableView Description 8"}];



UIImage *AppIconAsset = [UIImage imageNamed: [[NSBundle mainBundle].infoDictionary[@"CFBundleIcons"][@"CFBundlePrimaryIcon"][@"CFBundleIconFiles"] lastObject]];
    self.MyAppIconImage = [self ResizeImage: AppIconAsset scaledToSize: CGSizeMake(36, 36)];

    self.MyCustomTableView = [UITableView new];
    self.MyCustomTableView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addSubview: self.MyCustomTableView];
    self.MyCustomTableView.dataSource = self;
    self.MyCustomTableView.delegate = self;
    [self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[MyCustomTableView]|" options: 0 metrics: nil views: @{@"MyCustomTableView" : self.MyCustomTableView}]];

    [self.view addConstraints: [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[MyCustomTableView]|" options: 0 metrics: nil views: @{@"MyCustomTableView" : self.MyCustomTableView}]];
    MyCustomTableView.backgroundColor = [UIColor clearColor];

    [self.MyCustomTableView registerClass: [MyTableViewCell class].self forCellReuseIdentifier: myCellID];
    self.MyCustomTableView.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0);
    self.MyCustomTableView.allowsMultipleSelectionDuringEditing = NO;
    self.MyCustomTableView.alwaysBounceVertical = NO;
    [self.MyCustomTableView setShowsHorizontalScrollIndicator:NO];
    [self.MyCustomTableView setShowsVerticalScrollIndicator:NO];
    [self.MyCustomTableView setContentOffset: self.MyCustomTableView.contentOffset animated: NO];
    self.MyCustomTableView.estimatedRowHeight = 44;
    self.MyCustomTableView.backgroundView = nil;
   // self.MyCustomTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.MyCustomTableView setSeparatorColor:[UIColor blackColor]];
    self.MyCustomTableView.tableFooterView = [[UIView alloc] initWithFrame: CGRectZero];
    [self.MyCustomTableView.inputAccessoryView setBackgroundColor:[UIColor clearColor]];
    self.MyCustomTableView.opaque = NO;
}


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return  1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return  [self.MyTableViewData count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    MyTableViewCell *myCell = (MyTableViewCell *)[tableView dequeueReusableCellWithIdentifier: myCellID forIndexPath: indexPath];
    if (myCell == nil) {
        myCell = [[MyTableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: myCellID];
    }

    myCell.MyCellImageView = [UIImageView new];
    myCell.MyCellImageView.translatesAutoresizingMaskIntoConstraints = NO;
    [myCell.contentView addSubview: myCell.MyCellImageView];
    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"H:|-12-[MyCellImageView(34)]" options: 0 metrics: nil views: @{@"MyCellImageView": myCell.MyCellImageView}]];
    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"V:|-5-[MyCellImageView(34)]" options: 0 metrics: nil views: @{@"MyCellImageView": myCell.MyCellImageView}]];




    myCell.MyCellImageView.image = self.MyAppIconImage;
    myCell.MyCellImageView.backgroundColor = [UIColor clearColor];

    myCell.MyCellImageView.contentMode = UIViewContentModeCenter;
    myCell.MyCellImageView.userInteractionEnabled = NO;
    myCell.MyCellImageView.clipsToBounds = YES;
    myCell.MyCellImageView.layer.cornerRadius = 17;


    myCell.MyCellTitleLabel = [UILabel new];
    myCell.MyCellDescriptionLabel = [UILabel new];
    myCell.MyCellTitleLabel.translatesAutoresizingMaskIntoConstraints = NO;
    myCell.MyCellDescriptionLabel.translatesAutoresizingMaskIntoConstraints = NO;

    [myCell.contentView addSubview: myCell.MyCellTitleLabel];
    [myCell.contentView addSubview: myCell.MyCellDescriptionLabel];

    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"H:[MyCellImageView]-10-[MyCellTitleLabel]-10-|" options: 0 metrics: nil views: @{@"MyCellTitleLabel" : myCell.MyCellTitleLabel, @"MyCellImageView": myCell.MyCellImageView}]];
    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"H:[MyCellImageView]-10-[MyCellDescriptionLabel]-10-|" options: 0 metrics: nil views: @{@"MyCellDescriptionLabel" : myCell.MyCellDescriptionLabel, @"MyCellImageView": myCell.MyCellImageView}]];
    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"V:|-10-[MyCellTitleLabel]" options: 0 metrics: nil views: @{@"MyCellTitleLabel" : myCell.MyCellTitleLabel}]];

    [myCell.contentView addConstraints: [NSLayoutConstraint constraintsWithVisualFormat: @"V:[MyCellTitleLabel]-(5)-[MyCellDescriptionLabel]-10-|" options: 0 metrics: nil views: @{@"MyCellTitleLabel" : myCell.MyCellTitleLabel, @"MyCellDescriptionLabel" : myCell.MyCellDescriptionLabel}]];


     myCell.MyCellTitleLabel.text = [[self.MyTableViewData objectAtIndex:indexPath.row] valueForKey: @"Title"];

    myCell.MyCellDescriptionLabel.text = [[self.MyTableViewData objectAtIndex:indexPath.row] valueForKey: @"Description"];
    myCell.MyCellDescriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
    myCell.MyCellDescriptionLabel.numberOfLines = 0;

    myCell.MyCellDescriptionLabel.textAlignment = NSTextAlignmentJustified;
    myCell.MyCellDescriptionLabel.backgroundColor = [UIColor clearColor];

    myCell.backgroundColor = [UIColor clearColor];
    myCell.backgroundView.backgroundColor = [UIColor clearColor];
    myCell.backgroundView.opaque = NO;
    myCell.backgroundView = nil;
    myCell.textLabel.textColor = [UIColor blackColor];
    return myCell;
}



- (NSArray<UITableViewRowAction *> *)tableView: (UITableView *)tableView editActionsForRowAtIndexPath: (NSIndexPath *)indexPath
{
    MyTableViewCell *myCell = [MyCustomTableView cellForRowAtIndexPath: indexPath];
    [myCell.contentView layoutIfNeeded];
    UITableViewRowAction *rowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title: @"Delete" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

        NSLog(@"rowAction Performed !!");
    }];
    rowAction.backgroundColor = [UIColor clearColor];
    return @[rowAction];
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //  [self.objects removeObjectAtIndex:indexPath.row];
        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation: UITableViewRowAnimationFade];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view.
    }
}


-(UIImage*)ResizeImage:(UIImage*)image scaledToSize:(CGSize)newSize {

    UIGraphicsBeginImageContext( newSize );
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

MyTableViewCell.h

#import <UIKit/UIKit.h>

@interface MyTableViewCell : UITableViewCell
@property (nonatomic, strong) UILabel *MyCellTitleLabel;
@property (nonatomic, strong)UILabel *MyCellDescriptionLabel;
@property (nonatomic, strong)UIImageView *MyCellImageView;

@end

MyTableViewCell.m

#import "MyTableViewCell.h"

@implementation MyTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];
    // Initialization code
}

-(id)initWithStyle: (UITableViewCellStyle)style reuseIdentifier: (NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier: reuseIdentifier];
    if (self) {
        self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;


        //    self.nvFullScrnPlayerDelegate = self;
    }
    return self;
}

- (void)prepareForReuse {
    [super prepareForReuse];

    for(UIView *subview in [self.contentView subviews]) {
        [subview removeFromSuperview];
    }
}

-(void)layoutSubviews {
    [super layoutSubviews];
//    for (UIView *subview in  self.subviews) {
//        for (UIView *subview2 in subview.subviews) {
//
////NSRange range = ;
//            if ([(NSString *)subview2 rangeOfString:@"UITableViewCellActionButton"].location != NSNotFound) {
//                NSLog(@"1234567890");
//            }
////            if (range.location != NSNotFound) {
////                for (UIView *view in  subview2.subviews) {
////
////NSRange newRange = [(NSString *)view rangeOfString: @"UIButtonLabel"];
//////     if (String(view).rangeOfString("UIButtonLabel") != nil) {
////if (newRange.location != NSNotFound) {
////    UILabel *Textlabel = (UILabel *)view;
////    if (Textlabel == (UILabel *) view) {
////        Textlabel.textColor = [UIColor blackColor];
////    }
////                    }
////                }
////            }
//
//        }
//    }      

}
@end

這是我的結果:

在此處輸入圖片說明

在同一表視圖單元格上第二次滑動時,我得到了預期的結果,但第一次滑動時卻沒有。

有人可以幫我解決嗎?

希望這對您有所幫助!

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath  
{  
    UITableViewRowAction *callAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {  

        NSLog(@"View Action fired");  
    }];  
    callAction.backgroundColor = [UIColor clearColor];  

    return @[callAction];  
}

如果您將透明色設置為淺灰色,則可以設置SampleBg圖像,而不是透明色,可以從圖像中獲得相同的表格背景色,請嘗試下面的代碼。

- (NSArray<UITableViewRowAction *> *)tableView: (UITableView *)tableView editActionsForRowAtIndexPath: (NSIndexPath *)indexPath
{

    UITableViewRowAction *rowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"Delete" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

        NSLog(@"rowAction Performed !!");
    }];
    UIGraphicsBeginImageContext(self.view.frame.size);
    [[UIImage imageNamed:@"SampleBg"] drawInRect:self.view.bounds];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    rowAction.backgroundColor = [UIColor colorWithPatternImage:image];
    return @[rowAction];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM