我有一个自定义的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;
}
Run Code Online (Sandbox Code Playgroud)
按钮显示正确,带有适当的背景图像,但按下/单击按钮时,突出显示的图像不会立即显示.相反,您必须在更改发生之前将其保持一两秒钟.另一方面,释放按钮确实可以立即更改回原始背景图像.
在切换到突出显示的图像时尝试缓解迟到的变化,我将更改放在以下方法中:
- (IBAction)downDown:(id)sender {
[self.downButton setBackgroundColor:[UIColor redColor]];
}
Run Code Online (Sandbox Code Playgroud)
上面的方法设置为"Touch Down"(与更常见的"Touch Up Inside"相对),我已经删除setBackgroundImage:forState:了突出显示的状态.与上述相同的问题.颜色最终会变为红色,但只有在单击并按住按钮一两秒后才会变亮.
我有一个按钮的方法,当"Touch Up Inside"出现时,该方法会执行,并且该方法可以毫无问题地执行 - 无论我是否快速点击按钮,或者在释放之前单击并按住它一段时间.
那么为什么延迟"触地"还是UIControlStateHighlighted?我正在尝试向用户提供即时反馈,以显示按钮已被按下.
如果需要,我可以提供更多代码,但这些是与背景外观有关的唯一位.
我有一个自定义按钮,按下时图像会发生变化.此按钮位于UITableView中UITableViewCell的contentView中.
在图像变化之前按下按钮会有明显的延迟.将按钮从单元格中取出并进入UIView,即时按下图像的变化.
如何删除此延迟?
值得指出的是,我已经尝试在UITableView上设置延迟内容,但是我没有看到任何差别.
这是一些证明问题的测试代码.创建新项目并将UITableView添加到故事板.
#import "JWViewController.h"
@implementation JWViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.delaysContentTouches = NO;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; }
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return return 65.0f; }
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] init];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"apple"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"apple_selected"] forState:UIControlStateHighlighted];
button.frame = CGRectMake(0, 0, …Run Code Online (Sandbox Code Playgroud) 我有一个按钮,我将其添加为表视图的tableHeaderView的子视图.按钮看起来很好,并且它可以间歇性地按住它 - 但大多数情况下,它没有响应.我已经尝试将其添加为表格本身的子视图; 效果大致相同.我认为问题可能出在滚动视图的触摸拦截上,但是禁用滚动表也没有效果.
难道我做错了什么?有人遇到过这种情况么?
编辑 - 澄清一下,我说的是分组样式表中的主表头,而不是节头.认为基本上是在"联系"屏幕后建模的.
问题:当用户点击UITableViewCell中的UIButton时,该按钮只会在长按时突出显示,而不是快速点按.无论点击持续时间如何,此按钮都会突出显示所需的行为.
不幸的是:由于其他不需要的副作用,在任何UIScrollView或UITableView上将delaysContentTouches设置为NO都不是一个选项.
那么:我怎样才能解决这个问题 - 有没有办法将触摸转发到按钮,绕过delayedContentTouches值?