Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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 *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];