2017-02-08 45 views
0

我試圖建立一個類我自定義複選框創建UI按鈕。出於某種原因,我的圖像沒有被Xcode設置。然而我在我的應用程序中有其他類正在設置圖像沒有問題。UI複選框按鈕不更改圖像

Checkbox.h

#import <UIKit/UIKit.h> 

@interface checkBoxButton : UIButton 

@property (nonatomic,assign) IBInspectable BOOL checked; 


@end 

Checkbox.m

#import "checkBoxButton.h" 

@implementation checkBoxButton 

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

- (void)checkedBox:(BOOL) checked{ 
    self.checked = checked; 
    if(!self.checked){ 
     [self setImage: [UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected]; 
    } else { 
     [self setImage: [UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
    } 
} 

- (void) changeState { 
    self.checked = !self.checked; 
    [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

@end 
+0

你確定'checkedBox:'方法正在觸發嗎? – Stonz2

+0

誰在調用checkedBox? – GeneCode

+0

[self sendActionsForControlEvents:UIControlEventValueChanged];正是我認爲會觸發它,但它沒有。 – Hakim

回答

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

}

- (void)checkedBox:(BOOL) checked{ 
if(!self.checked){ 
    self.checked = checked; 
    [self setImage: [UIImage imageNamed:@"checked.png"] forState:UIControlStateNormal]; 
} else { 
    self.checked = !checked; 

    [self setImage: [UIImage imageNamed:@"unchecked.png"] forState:UIControlStateNormal]; 
} 

}

試試看。

+0

不幸的是,我試了一下,沒有工作。 Idk爲什麼。 – Hakim

0

UIButtonBox

// 
// UIButtonBox.h 
// 
// 
// Created by Nischal Hada on 9/16/15. 
// Copyright (c) 2015 Nischal Hada. All rights reserved. 
// 

#import <UIKit/UIKit.h> 

@interface UIButtonBox : UIButton 
@property (nonatomic) BOOL isSelected; 
@property (nonatomic,strong) NSString *selectImage; 
@property (nonatomic,strong) NSString *deSelectImage; 
- (void)select; 
- (void)deselect; 
- (void) setBackgroundImage:(UIImage *)image forState:(UIControlState)state; 
@end 



// 
// UIButtonBox.m 
// 
// 
// Created by Nischal Hada on 9/16/15. 
// Copyright (c) 2015 Nischal Hada. All rights reserved. 
// 

#import "UIButtonBox.h" 



@implementation UIButtonBox 

- (void) layoutSubviews { 
    [super layoutSubviews]; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (id) initWithCoder:(NSCoder *)aDecoder { 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
    } 
    return self; 
} 

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

- (void) setBackgroundImage:(UIImage *)image forState:(UIControlState)state { 
    [super setBackgroundImage:image forState:state]; 
} 

- (void) setBackgroundImage:(NSString *)imageName { 
    self.isSelected = ([imageName isEqualToString:self.deSelectImage])?YES:NO; 
    [self setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    [self setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateSelected]; 
} 

- (NSString *)selectImageName { 
    return self.selectImage; 
} 

- (NSString *)deSelectImageName { 
    return self.deSelectImage; 
} 

- (void)select { 
    [self setBackgroundImage:self.deSelectImage]; 
} 
- (void)deselect { 
    [self setBackgroundImage:self.selectImage]; 
} 

@end 

CountrySelectCell

// 
// CountrySelectCell.h 
// 
// 
// Created by Nischal Hada on 12/12/15. 
// 
// 

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

@interface CountrySelectCell : UITableViewCell 
@property (strong, nonatomic) IBOutlet UILabel *lblName; 

@property (nonatomic) BOOL isSelected; 
@property (weak, nonatomic) IBOutlet UIButtonBox *btnCHeckBox; 
- (IBAction)actionCheckBox:(id)sender; 



@end 





// 
// CountrySelectCell.m 
// 
// 
// Created by Nischal Hada on 12/12/15. 
// 
// 

#import "CountrySelectCell.h" 
#import "Constants.h" 


@implementation CountrySelectCell 

- (void)awakeFromNib { 
    self.lblName.font = [UIFont fontWithName:REGULAR_PROXIMANOVA_FONT size:SIZE_REGULAR__FONT]; 
} 

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

    // Configure the view for the selected state 
} 


#pragma mark - 
#pragma mark Object Methods 
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
    if (self) { 
     // Initialization code 
     self.isSelected = NO; 
    } 
    return self; 
} 

#pragma mark - 
#pragma mark IBAction Methods 

- (IBAction)actionCheckBox:(id)sender { 
    self.isSelected = !self.isSelected; 
    (self.isSelected)?[self.btnCHeckBox select]:[self.btnCHeckBox deselect]; 
} 

@end 
CountrySelectVC.m 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    static NSString *simpleTableIdentifier = @"CountrySelectCell"; 
CountrySelectCell *cell = (CountrySelectCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

if (cell == nil) 
{ 
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CountrySelectCell" owner:self options:nil]; 
cell = [nib objectAtIndex:0]; 
} 

cell.lblName.text = [[tableData objectAtIndex:indexPath.row]uppercaseString]; 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 

cell.btnCHeckBox.deSelectImage = @"checkbox.png"; 
cell.btnCHeckBox.selectImage = @"uncheckbox.png"; 
[cell.btnCHeckBox setBackgroundImage:[UIImage imageNamed:@"uncheckbox.png"] forState:UIControlStateNormal]; 


return cell; 


}