首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在iOS7中,UIButton在点击时不显示突出显示

在iOS7中,UIButton在点击时不显示突出显示
EN

Stack Overflow用户
提问于 2013-10-09 03:50:24
回答 17查看 24K关注 0票数 71

我看过一大堆关于类似事情的帖子,但没有一个能与这个问题相匹配或解决这个问题。从iOS 7开始,每当我将UIButton添加到UITableViewCell甚至页脚视图中时,它都会“正常”工作,这意味着它会接收目标操作,但它不会像点击UIButton时那样高亮显示。它使用户界面看起来很时髦,没有显示按钮对触摸的反应。

我非常确定这是iOS7中的一个错误,但是有没有人能找到一个解决方案,或者可以帮我找到一个:)

编辑:我忘了提到,如果我长时间按住按钮,它会高亮显示,但不会像添加到标准视图中那样快速点击。

代码:

创建按钮:

代码语言:javascript
复制
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.titleLabel.font = [UIFont systemFontOfSize:14];
    button.titleLabel.textColor = [UIColor blueColor];
    [button setTitle:@"Testing" forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonPressed:) forControlEvents: UIControlEventTouchDown];
    button.frame = CGRectMake(0, 0, self.view.frame.size.width/2, 40);

我测试过的东西:

//删除UITableView上的手势识别器,以防它们挡道。

代码语言:javascript
复制
for (UIGestureRecognizer *recognizer in self.tableView.gestureRecognizers) {
   recognizer.enabled = NO;
}

//从单元格中移除手势

代码语言:javascript
复制
for (UIGestureRecognizer *recognizer in self.contentView.gestureRecognizers) {
       recognizer.enabled = NO;
    }

//这显示了一点轻触,但这不是所需的外观

代码语言:javascript
复制
button.showsTouchWhenHighlighted = YES;
EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2013-10-10 23:04:00

在表视图中,只需添加此属性即可。

代码语言:javascript
复制
tableview.delaysContentTouches = NO;

并在初始化单元格后添加cellForRowAtIndexPath,只需在下面添加代码。在iOS 6和iOS 7中,细胞的结构明显不同。

在iOS 7中,我们在UITableViewCell和内容视图之间有一个控件UITableViewCellScrollView。

代码语言:javascript
复制
for (id obj in cell.subviews)
{
    if ([NSStringFromClass([obj class]) isEqualToString:@"UITableViewCellScrollView"])
    {
        UIScrollView *scroll = (UIScrollView *) obj;
        scroll.delaysContentTouches = NO;
        break;
    }
}
票数 92
EN

Stack Overflow用户

发布于 2014-07-10 08:15:31

从iOS 8开始,我们需要将同样的技术应用于UITableView子视图(表包含一个隐藏的UITableViewWrapperView滚动视图)。不再需要迭代UITableViewCell子视图。

代码语言:javascript
复制
for (UIView *currentView in tableView.subviews) {
    if ([currentView isKindOfClass:[UIScrollView class]]) {
        ((UIScrollView *)currentView).delaysContentTouches = NO;
        break;
    }
}

This answer应该与这个问题联系在一起。

票数 40
EN

Stack Overflow用户

发布于 2013-10-30 07:31:40

我试图将此添加到可接受的答案中,但从未成功。这是一种更安全的关闭cells delaysContentTouches属性的方法,因为它不查找特定的类,而是查找响应选择器的任何内容。

在单元格中:

代码语言:javascript
复制
for (id obj in self.subviews) {
     if ([obj respondsToSelector:@selector(setDelaysContentTouches:)]) {
          [obj setDelaysContentTouches:NO];
     }
}

在TableView中:

代码语言:javascript
复制
self.tableView.delaysContentTouches = NO;
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19256996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档