Ios UIButton图像不';轻敲时不要改变
我需要有一个图像按钮更改为不同的图像,当我点击它。很简单,还有一些样品,但它们不适合我。以下是我在以下示例中尝试的内容:Ios UIButton图像不';轻敲时不要改变,ios,objective-c,uibutton,Ios,Objective C,Uibutton,我需要有一个图像按钮更改为不同的图像,当我点击它。很简单,还有一些样品,但它们不适合我。以下是我在以下示例中尝试的内容: UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; button.frame = CGRectMake(20, 270, 200, 40.0); [button setImage:[UIImage imageNamed:@"butterfly3.png"] forState:UIContr
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 270, 200, 40.0);
[button setImage:[UIImage imageNamed:@"butterfly3.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
[button addTarget:self action:@selector(buttonPressed) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Submit" forState:UIControlStateNormal];
[scrollView button];
现在,我注意到我的按钮设置为在UIControlEventTouchDown
上执行其操作,因此我将其添加到“单击”控件状态,如下所示:
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];
[myQuery findObjects]
[myQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
// whatever is needed to be done
}
} else {
NSLog(@"Error while fetching objects %@", error.description);
}
}];
但图像仍然保持不变。我错过了什么 只需通过此更改您的代码,一切都将正常工作
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected];
内部按钮按下方法设置按钮。选择=是;还设置了Miroslav提到的图像 您似乎正在将被解释为状态掩码的事件掩码uicontrol事件触地放置在此行中:
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];
事实上,我认为您可能根本不需要这一行,因为您已经设置了适当的图像。尝试从此行删除UIControlEventTouchDown或注释掉整行。问题是我的buttonPressed方法在主线程上执行了一个长(ish)查询,并且由于某种原因,在这种情况下突出显示按钮不起作用 当我将查询移动到一个单独的线程时,突出显示又开始了 为了完整起见,我将把代码带到这里。最初,我通过Parse.com API获取对象,如下所示:
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];
[myQuery findObjects]
[myQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
// whatever is needed to be done
}
} else {
NSLog(@"Error while fetching objects %@", error.description);
}
}];
上面的操作在主线程上执行查询,并阻止所有其他操作
然后我将其更改为在单独的线程中获取,如下所示:
[button setImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateSelected | UIControlStateHighlighted | UIControlEventTouchDown];
[myQuery findObjects]
[myQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if(!error) {
// whatever is needed to be done
}
} else {
NSLog(@"Error while fetching objects %@", error.description);
}
}];
你确定这是正确的按钮吗?在何处将按钮添加到视图?按钮按下方法是什么样子的?当按钮被选项卡化时,它将实际使用
uicontrol状态突出显示
而不是uicontrol状态选择
如果您想使用uicontrol状态选择
状态,您将需要设置[按钮设置选择:是]代码>否则只需将UIControlStateSelected
更改为UIControlStateHighlighted
,即可为您完成任务。当然,因为–…forState:
不是多选选项,并且UIControlStateSelected | UIControlStateHighlighted
值是0x05
,这不是有效的控制状态(没有为该值定义状态,关于所选状态是0x04
,突出显示的是0x01
)。UIControlEventTouchDown
甚至不是UIControlState
,这只会让事情变得更糟。在我诚实地回答问题是什么(请参阅下面的答案)之后,为什么要投否决票?@PeterSegerblom评论让我走上了正确的轨道,我发现了问题所在。否决票对我来说毫无意义。@Eddy,你在这里犯下的基本错误,无论有没有否决票,仍然是基本错误。谢谢你的回答。当我按照你和Miroslav的建议做时,图像确实会更改为clicked.png,但我只有在关闭它打开的tableView后才能看到它。这不是我需要的。我想要的只是一个按钮,它的行为就像一个按钮:点击时会高亮显示,因此用户知道他/她点击了它,然后返回到正常状态。最简单的按钮行为。删除此行:[按钮集图像:[按钮集图像:[UIImage ImageName:@“clicked.png”]forState:UIControlStateSelected];