按钮不会出现在表格单元格中

时间:2014-07-11 09:51:49

标签: ios uitableview uibutton

我有一个自定义按钮的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

1 个答案:

答案 0 :(得分:1)

为什么要在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
<{1>}文件中的

"favButton.m"
<{1>}文件中的

仅包含这些方法

 #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
控制器中的

都是相同的,无需更改

结束修改

希望这有助于你......:)