Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义UIButton不会更改其图像_Ios_Objective C_Uibutton - Fatal编程技术网

Ios 自定义UIButton不会更改其图像

Ios 自定义UIButton不会更改其图像,ios,objective-c,uibutton,Ios,Objective C,Uibutton,我创建了一个自定义UIButton,它有一个字段“selected”来标识这个按钮是否被选中。默认设置:将其图像设置为image1。选择后,它将更改为image2 @interface MyButton: UIButton @property (getter=isSelected, setter=setSelected:) BOOL selected; @end @implementation MyButton @synthesize selected = _selected; - (

我创建了一个自定义UIButton,它有一个字段“selected”来标识这个按钮是否被选中。默认设置:将其图像设置为image1。选择后,它将更改为image2

@interface MyButton: UIButton @property (getter=isSelected, setter=setSelected:) BOOL selected; @end @implementation MyButton @synthesize selected = _selected; - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.selected = NO; } return self; } -(void) setSelected:(BOOL)selected { if (selected) { [self setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal]; } else { [self setImage:[UIImage imageNamed:@"image2"] forState:UIControlStateNormal]; } _selected = selected; } -(BOOL) isSelected { return _selected; } @界面MyButton:UIButton @属性(getter=isSelected,setter=setSelected:)BOOL selected; @结束 @实现MyButton @综合所选=_所选; -(id)initWithFrame:(CGRect)帧 { self=[super initWithFrame:frame]; 如果(自我){ self.selected=否; } 回归自我; } -(无效)已选择:(布尔)已选择 { 如果(选定) { [self-setImage:[UIImage ImageName:@“image1”]用于状态:UIControlStateNormal]; } 其他的 { [self-setImage:[UIImage ImageName:@“image2”]用于状态:UIControlStateNormal]; } _选中=选中; } -(BOOL)我当选了 { 返回(已选择);; } 现在,从UIViewController,我将这个自定义按钮添加到它的视图中。当用户单击另一个按钮时,我希望我的自定义按钮应该更改其图像(从image1->image2,反之亦然)

@接口SessionViewController(){ 我的按钮*btn; } @结束 @实现视图控制器 -(无效)viewDidLoad { [超级视图下载]; btn=[[MyButton alloc]initWithFrame:CGRectMake(0,0100100)]; } -(iAction)触摸ChangeStateButton { BOOL b=btn.isSelected; btn.selected=!b; } @结束 我的问题是为什么我的自定义按钮不改变其图像???谢谢。

更改此选项:

if (selected)
    {
        [self setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal];        
    }
    else
    {
        [self setImage:[UIImage imageNamed:@"image2"] forState:UIControlStateNormal];        
    }
为此:

    if (selected)
        {
// set image for selected state
            [self setBackgroundImage:[UIImage imageNamed:@"image1"] forState:UIControlStateSelected];        
        }
        else
        {
// set image for normal state
            [self setBackgroundImage:[UIImage imageNamed:@"image2"] forState:UIControlStateNormal];        
        }
或者,您可以通过init方法一次简单地定义两个图像

[self setBackgroundImage:[UIImage imageNamed:@"image2"] forState:UIControlStateSelected];
[self setBackgroundImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal];

我认为问题在于UIButton的内置选定属性干扰了您的自定义属性。我尝试将名称更改为“selacted”(只是为了使其与众不同),并更改了所有相应的代码,如下图所示,它似乎按照您的预期工作

@interface MyButton : UIButton

@property (getter=isSelacted, setter=setSelacted:) BOOL selacted;

@end

@implementation MyButton

@synthesize selacted = _selacted;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.selacted = NO;
    }
    return self;
}

-(void) setSelacted:(BOOL)selacted
{
    if (selacted)
    {
        [self setImage:[UIImage imageNamed:@"image1"] forState:UIControlStateNormal];
    }
    else
    {
        [self setImage:[UIImage imageNamed:@"image2"] forState:UIControlStateNormal];
    }

    _selacted = selacted;
}

-(BOOL) isSelacted
{
    return _selacted;
}
然后在viewController中:

- (IBAction) touchChangeStateButton
{
    BOOL b = btn.isSelacted;
    btn.selacted = !b;
}

我的目的是更改其图像,而不是更改其状态(例如,UIControlStateSelected、UIControlStateNormal)。你的方式不起作用。你没有改变它的状态,只是每个状态的背景图像。在正常状态下更改图像不会影响处于选定状态的按钮。然后,您需要在init方法中定义要与此按钮一起使用的所有图像。如果这是您唯一需要的,您甚至不需要创建MyButton类,只需在初始化按钮程序时设置图像MaticallyNo,实际上我的情况更复杂。我不想在这里写所有的代码。“我的自定义”按钮包含其他子视图,如2个UILabels、2个UIImageView等。。。在UIViewController中,有许多这样的自定义按钮。这就是为什么我必须编写我的通用自定义按钮。
- (IBAction) touchChangeStateButton
{
    BOOL b = btn.isSelacted;
    btn.selacted = !b;
}