繁体   English   中英

按钮不会显示在表格单元格中

[英]Button won't show up in the table cell

我有一个自定义按钮的UIButton子类。 然后,我有一个UITableViewCell子类,该子类使用此按钮并将其放置在单元格中。 最后,我有UITableViewController的子类,该子类显示表视图并包含自定义单元格。 我的问题是自定义按钮“ starbtn”不会显示在表格中,而其他所有内容都可以正常使用。 我的代码有什么问题?

favButton.h

#import <UIKit/UIKit.h>

@interface favButton : UIButton {
    BOOL    _checked;
}

@property (nonatomic, setter = setChecked:) BOOL checked;

-(void) setChecked:(BOOL) check;

@end

favButton.m

#import "favButton.h"

@implementation favButton

@synthesize checked = _checked;

-(id) init
{
    if( self=[super init] )
    {
        self.checked = NO;
        [self addTarget:self action:@selector(OnCheck:) forControlEvents:UIControlEventTouchUpInside];
    }
    return self;
}

-(void) awakeFromNib
{
    self.checked = NO;
    [self addTarget:self action:@selector(OnCheck:) forControlEvents:UIControlEventTouchUpInside];
}

-(void) setChecked:(BOOL) check
{
    _checked = check;
    if( _checked )
    {
        [self setTintColor:[UIColor clearColor]]; 
        UIImage* img = [UIImage imageNamed:@"startbefore.jpg"];
        [self setImage:img forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected|UIControlStateDisabled];

    }
    else
    {
        [self setTintColor:[UIColor clearColor]]; 
        UIImage* img = [UIImage imageNamed:@"startafter.jpg"];
        [self setImage:img forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected|UIControlStateDisabled];

    }
}

-(void) OnCheck:(id) sender
{
    self.checked = !_checked;
}


@end

imageCellCell.h

#import <UIKit/UIKit.h>
#import "favButton.h"

    @interface imageCellCell : UITableViewCell 

    @property (nonatomic, strong) UIView *view;
    @property (nonatomic, strong) UILabel *label1;
    @property (nonatomic, strong) UILabel *label2;
    @property (nonatomic, strong) UIImageView *prodimage;
    @property (nonatomic, strong) UIImageView *thumbsup;
    @property (nonatomic, strong) UILabel *label3;
    @property (nonatomic, strong) UIImageView *basket;
    @property (nonatomic, strong) UIButton *homebtn;

    @property (nonatomic, strong) favButton *starbtn;

    @end

imageCellCell.m

#import "imageCellCell.h"




@implementation imageCellCell

@synthesize view;
@synthesize label1;
@synthesize label2;
@synthesize prodimage;
@synthesize thumbsup;
@synthesize label3;
@synthesize basket;
@synthesize homebtn;
@synthesize starbtn;



- (instancetype)init {

    self = [super init];
    self.starbtn = [[favButton alloc]initWithFrame:CGRectMake(243,0, 30, 30)];

    [starbtn setTintColor:[UIColor clearColor]]; 

    [starbtn setBackgroundImage:[UIImage imageNamed:@"startbefore.jpg"] 
                       forState:UIControlStateNormal];
    return self;
}

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        view = [[UIView alloc] initWithFrame:self.frame];
        [self addSubview:view];

        // initiate image
        prodimage = [[UIImageView alloc]initWithFrame:CGRectMake(30,2, 180, 180)];

        // initiate label1 score value
        label1 = [[UILabel alloc] initWithFrame:CGRectMake(230,80,150,20)];
        label1.textColor = [UIColor greenColor];

        [[self label1] setFont:[UIFont systemFontOfSize:25]];


        // initiate label2 score label
        label2 = [[UILabel alloc] initWithFrame:CGRectMake(232,50,150,20)];

        // initiate image
        thumbsup = [[UIImageView alloc]initWithFrame:CGRectMake(240,108, 30, 30)];

        // initiate label3 manufacturer

        label3 = [[UILabel alloc] initWithFrame:CGRectMake(90,200,180,20)];

        // initiate image
        basket = [[UIImageView alloc]initWithFrame:CGRectMake(280,1, 30, 30)];


        // initiate home button       
        homebtn = [[UIButton alloc]initWithFrame:CGRectMake(4,0, 30, 30)];


        [homebtn setTintColor:[UIColor clearColor]]; 
        [homebtn setBackgroundImage:[UIImage imageNamed:@"home.jpg"]
                            forState:UIControlStateNormal];


        [view addSubview:prodimage];
        [view addSubview:label1];
        [view addSubview:label2];
        [view addSubview:thumbsup];
        [view addSubview:label3];
        [view addSubview:basket];
        [view addSubview:homebtn];
        [view addSubview:starbtn];

    }
    return self;
}

@end

ProdViewController.m

#import "ProdViewController.h"
#import "imageCellCell.h"


@interface ProdViewController ()

@end

@implementation ProdViewController
@synthesize tableview;
@synthesize tabbar;
@synthesize addfav;
@synthesize favData;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    favData = [[NSMutableArray alloc] init];
    [tableview setDataSource:self];
    [tableview setDelegate:self];


  }

- (void)viewDidUnload
{
    [self setTableview:nil];
    [self setTabbar:nil];
    [self setAddfav:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}


...


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


NSString *CellIdentifier;
NSString *CellIdentifierimg;

    UITableViewCell *cell;
    if (cell == nil) {
        if (indexPath.row == 0) {
            cell = [[imageCellCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifierimg];
        } else if (indexPath.row == 1) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
        }else if (indexPath.row == 2) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
        }else if (indexPath.row == 3) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
        }else if (indexPath.row == 4) {
                    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];

    }
    }




    switch ([indexPath row])
    {
        case 0:
        {

            imageCellCell *firstRowCell = (imageCellCell *)cell;


            [firstRowCell.thumbsup  setImage: [UIImage imageNamed:@"thumbs-up-green.jpg"]];

            [firstRowCell.prodimage  setImage: [UIImage imageNamed:@"test1.jpg"]];
            [firstRowCell.label1 setText:@"10"];
            [firstRowCell.label2 setText:@"Score"];
            [firstRowCell.label3 setText:@"Name"];

            [firstRowCell.basket  setImage: [UIImage imageNamed:@"Basket.jpg"]];

            // reference of the home button to the buttonclick method

            [firstRowCell.homebtn addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside]; 

            // reference of the favorites button to the buttonclick method

            [firstRowCell.starbtn addTarget:self action:@selector(clickFavButton:) forControlEvents:UIControlEventTouchUpInside];




            firstRowCell.accessoryType = UITableViewCellAccessoryNone;

            cell.selectionStyle = UITableViewCellSelectionStyleNone;


            break;


        }
        case 1:
        {


                cell.textLabel.text = @"Row 2";
                cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
                cell.selectionStyle = UITableViewCellSelectionStyleNone;

            break;

        }

        case 2:
        {
            cell.textLabel.text = @"Row 3";
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;


            break;

        }

        case 3:
        {
            cell.textLabel.text = @"Row 4";
            cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;


            break;


        }

            }

    return cell;

}



-(IBAction)clickFavButton:(id)sender{

[favData addObject:@"productname"];



}



@end

为什么您要在init方法中添加starbtn ,将代码放入- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

注释掉整个init方法

 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
 {
     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
     if (self) {

    view = [[UIView alloc] initWithFrame:self.frame];
    [self addSubview:view];

    // initiate image
    prodimage = [[UIImageView alloc]initWithFrame:CGRectMake(30,2, 180, 180)];

    // initiate label1 score value
    label1 = [[UILabel alloc] initWithFrame:CGRectMake(230,80,150,20)];
    label1.textColor = [UIColor greenColor];

    [[self label1] setFont:[UIFont systemFontOfSize:25]];


    // initiate label2 score label
    label2 = [[UILabel alloc] initWithFrame:CGRectMake(232,50,150,20)];

    // initiate image
    thumbsup = [[UIImageView alloc]initWithFrame:CGRectMake(240,108, 30, 30)];

    // initiate label3 manufacturer

    label3 = [[UILabel alloc] initWithFrame:CGRectMake(90,200,180,20)];

    // initiate image
    basket = [[UIImageView alloc]initWithFrame:CGRectMake(280,1, 30, 30)];


    // initiate home button       
    homebtn = [[UIButton alloc]initWithFrame:CGRectMake(4,0, 30, 30)];


    [homebtn setTintColor:[UIColor clearColor]]; 
    [homebtn setBackgroundImage:[UIImage imageNamed:@"home.jpg"]
                        forState:UIControlStateNormal];

     //initilise hear
     //edit
     starbtn = [[favButton alloc]init];
     starbtn.frame = CGRectMake(243,0, 30, 30)];
    //edit
     [starbtn setTintColor:[UIColor clearColor]]; 

     [starbtn setBackgroundImage:[UIImage imageNamed:@"startbefore.jpg"] 
                   forState:UIControlStateNormal];

    [view addSubview: starbtn]; //add this

    [view addSubview:prodimage];
    [view addSubview:label1];
    [view addSubview:label2];
    [view addSubview:thumbsup];
    [view addSubview:label3];
    [view addSubview:basket];
    [view addSubview:homebtn];
    [view addSubview:starbtn];

 }
  return self;
}

编辑答案

在您的"favButton.h"文件中

  #import <UIKit/UIKit.h>
  @interface favButton : UIButton
  {
     BOOL    _checked;
  }
  @property (nonatomic, setter = setChecked:) BOOL checked;
  -(void) setChecked:(BOOL) check;

  @end

"favButton.m"文件中

 #import "favButton.h"

 @implementation favButton

 - (id)initWithFrame:(CGRect)frame
  {
     self = [super initWithFrame:frame];
     if (self) {
          // Initialization code
          self.checked = NO;
          [self addTarget:self action:@selector(OnCheck:) forControlEvents:UIControlEventTouchUpInside];
      }
      return self;
   }

   -(void) awakeFromNib
    {
       self.checked = NO;
       [self addTarget:self action:@selector(OnCheck:) forControlEvents:UIControlEventTouchUpInside];
    }

   -(void) setChecked:(BOOL) check
   {
     _checked = check;
     if( _checked )
     {
      //  [self setTintColor:[UIColor clearColor]];
          UIImage* img = [UIImage imageNamed:@"22.jpg"];
      //        [self setImage:img forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected|UIControlStateDisabled];
        [self setImage:[UIImage imageNamed:@"22.jpg"] forState:UIControlStateNormal];

      }
      else
      {
       // [self setTintColor:[UIColor clearColor]];
        UIImage* img = [UIImage imageNamed:@"33.jpg"];
       // [self setImage:img forState:UIControlStateNormal|UIControlStateHighlighted|UIControlStateSelected|UIControlStateDisabled];
       [self setImage:[UIImage imageNamed:@"33.jpg"] forState:UIControlStateNormal];
     }
   }

  -(void) OnCheck:(id) sender
  {
     self.checked = !_checked;
  } 


 /*
 // Only override drawRect: if you perform custom drawing.
  // An empty implementation adversely affects performance during animation.
 - (void)drawRect:(CGRect)rect
  {
    // Drawing code
  }
 */

 @end

imageCellCell.h文件中

仅包括这些方法

  - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
 {
    // Initialization code
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

        view = [[UIView alloc] initWithFrame:self.frame];
        [self addSubview:view];

        // initiate image
        prodimage = [[UIImageView alloc]initWithFrame:CGRectMake(30,2, 180, 180)];

        // initiate label1 score value
        label1 = [[UILabel alloc] initWithFrame:CGRectMake(230,80,150,20)];
        label1.textColor = [UIColor greenColor];

        [[self label1] setFont:[UIFont systemFontOfSize:25]];


        // initiate label2 score label
        label2 = [[UILabel alloc] initWithFrame:CGRectMake(232,50,150,20)];

        // initiate image
        thumbsup = [[UIImageView alloc]initWithFrame:CGRectMake(240,108, 30, 30)];

        // initiate label3 manufacturer

        label3 = [[UILabel alloc] initWithFrame:CGRectMake(90,200,180,20)];

        // initiate image
        basket = [[UIImageView alloc]initWithFrame:CGRectMake(280,1, 30, 30)];


        // initiate home button
        homebtn = [[UIButton alloc]initWithFrame:CGRectMake(4,0, 30, 30)];


        [homebtn setTintColor:[UIColor clearColor]];
        [homebtn setBackgroundImage:[UIImage imageNamed:@"home.jpg"]
                           forState:UIControlStateNormal];
        starbtn = [[favButton alloc]initWithFrame:CGRectMake(243,0, 30, 30)];
        starbtn.backgroundColor = [UIColor greenColor];
       // starbtn.frame = CGRectMake(243,0, 30, 30);

        //edit
        [starbtn setTintColor:[UIColor clearColor]];

        [starbtn setBackgroundImage:[UIImage imageNamed:@"startbefore.jpg"]
                           forState:UIControlStateNormal];

        [view addSubview: starbtn]; //add this

        [view addSubview:prodimage];
        [view addSubview:label1];
        [view addSubview:label2];
        [view addSubview:thumbsup];
        [view addSubview:label3];
        [view addSubview:basket];
        [view addSubview:homebtn];
        [view addSubview:starbtn];

    }
    return self;
  }

  - (void)setSelected:(BOOL)selected animated:(BOOL)animated
  {
     [super setSelected:selected animated:animated];

     // Configure the view for the selected state
  }

  @end

在控制器中都是一样的,无需更改

结束编辑

希望这对你有帮助.. :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM