【发布时间】:2014-05-20 10:16:15
【问题描述】:
我有一个自定义的 UITableViewCell,它由以下内容初始化:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
self = [nibArray objectAtIndex:0];
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
[self.downButton setBackgroundImage:[UIImage imageNamed:@"button"] forState:UIControlStateNormal];
[self.downButton setBackgroundImage:[UIImage imageNamed:@"buttonSelected"] forState:UIControlStateHighlighted];
}
return self;
}
按钮正确显示,带有适当的背景图像,但在按下/单击按钮时,突出显示的图像不会立即出现。相反,您必须在更改发生之前按住它一两秒钟。另一方面,释放按钮确实会立即变回原始背景图像。
为了减轻切换到突出显示的图像时的延迟变化,我将更改放在以下方法中:
- (IBAction)downDown:(id)sender {
[self.downButton setBackgroundColor:[UIColor redColor]];
}
上面的方法设置为“Touch Down”(相对于更常见的“Touch Up Inside”),我已经删除了突出显示状态的setBackgroundImage:forState:。和上面提到的一样的问题。颜色最终会变为红色,但仅在单击并按住按钮一两秒后才会发生。
我有一个在“Touch Up Inside”发生时调用的按钮方法,并且该方法执行没有问题 - 无论我是快速点击按钮,还是在释放之前单击并按住它一段时间.
那么为什么会延迟“Touch Down”或UIControlStateHighlighted?我正在尝试向用户提供即时反馈,以表明该按钮已被按下。
如果需要,我可以提供更多代码,但这些是唯一与背景外观有关的部分。
【问题讨论】:
-
我想说这是因为图像没有预先加载,但显然这不适用于彩色情况。当你不创建自己的并使用 Xcode 的故事板来生成按钮时,它会有所不同吗?
-
同样的交易。如果我在情节提要编辑器中定义背景图像/颜色,按钮仍然需要用户按住一段时间才能发生任何更改。
-
这是奇怪的行为。由于没有人回答这个问题,我建议在谷歌上搜索“objective c touchdown delay”。
-
那是我看的第一个地方。如果不先与它抗争,我不会在这里发布一些东西。
-
它在 iOS 9 上对我不起作用
标签: ios objective-c uitableview uibutton