如何从UITableViewCell中的自定义UIButton中删除触摸延迟

JMW*_*ker 19 objective-c uibutton uitableview ios

我有一个自定义按钮,按下时图像会发生变化.此按钮位于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, 65, 65);
    [cell.contentView addSubview:button];
    return cell;
}

@end
Run Code Online (Sandbox Code Playgroud)

我搜索过,似乎还有其他一些 与此有关的帖子,但没有一个有工作答案.

在这个简单的案例中,这篇博文似乎不起作用.

小智 -2

您需要将触摸事件直接传递给按钮。

 [yourTableViewObject setDelaysContentTouches:NO];
Run Code Online (Sandbox Code Playgroud)

这会在触摸按钮时禁用表格视图的滚动。您可以通过使用手势识别器或子类化表视图来实现

- (BOOL)touchesShouldCancelInContentView:(UIView *)view {
return YES;
}
Run Code Online (Sandbox Code Playgroud)