在UITableView标题中的UIButton忽略最触动

问题描述:

我有一个按钮,我将添加为表视图的tableHeaderView的子视图。按钮显示正常,点击并保持不动 - 大多数情况下,它没有反应。我试着将它作为表本身的子视图来添加;效果大致相同。我认为这个问题可能与滚动视图的触摸拦截有关,但在表上禁用滚动也没有效果。在UITableView标题中的UIButton忽略最触动

我做错了什么?有人遇到过这种情况么?

编辑 - 为了澄清,我说的是主表标题,而不是段标题,在分组样式表中;认为基本上是在“联系人”屏幕后建模的。

+0

我遇到了这个确切的问题,但接受的答案不适用于我。 [这个问题的答案](http://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7/19299451#19299451)完美地解决了我的问题。 – 2014-01-16 03:46:18

我有同样的问题。在我的情况下,我有一个在IB中实例化的容器视图(它被用作代码中的表视图标题),UIImageView占用了该容器的整个框架。行为不端按钮驻留在图像视图中。

原来我需要在IB上浆支柱设置如下......

容器视图:外部锚都在,内部大小调整 - 全部关闭

子图像视图:在(内部的所有支柱和外部)

我有几个不同的表视图,所有使用标题视图。有些人会正确回应触摸事件,有些是片状的。这解决了我的问题

+2

+1。这对我有效。我没有使用IB,所以我不得不用`-setAutoresizingMask:`编程设置struts,并且我发现它只在容器上是必需的。内部图像控件不需要任何东西。谢谢!永远不会偶然偶然发现这一点。 – 2010-03-03 13:57:16

+0

经过几个小时的抨击我的头,这为我工作。谢谢。 – thedeveloper3124 2013-01-19 10:51:02

您应该认为这不是headerView的预期起诉,并且像这样的实现可能会导致由于HIG违例而从AppStore中被拒绝。考虑到标题的尺寸很小,最好考虑对视图进行重构。话虽如此,但没有简单的方法可以通过手工检测触摸事件并自己确定几何体,然后根据几何体执行选择器 - 简而言之,就是滚动您自己的按钮类。

+0

我在HIG中找不到任何内容,禁止使用表格中的按钮(而不是章节)页眉/页脚视图;联系人应用程序将按钮附加到表格页脚没有问题,苹果公司的“HeaderFooter”样本做了类似的事情(虽然它表现出同样的问题)。雷达,也许? – 2008-11-18 00:03:41

+0

更可能的是,我会建议提交一个错误。 – wisequark 2008-11-18 17:29:52

我完全不同意Wisequark - 但绝对没有错与把一个按钮,在tableHeaderView,并包括一个会冒险您的应用程序从App Store被拒绝。 tableHeaderView被设计成一个包含你选择的任何元素的任意视图。

就您的问题而言,可能是您的视图模糊了您的按钮,或者,它可能只是一个应该向Apple报告的错误。

我有一个类似的问题 - 视图中的文本框和按钮设置为表头视图,它不会响应触摸事件。 setAutoResizing以编程方式为我工作。

我的控制器扩展的UITableViewController和viewDidLoad中看起来是这样的:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    MYCustomWidget *headerView = [[[NSBundle mainBundle] 
       loadNibNamed:@"MYCustomWidgetView" owner:self options:nil] 
       objectAtIndex:0]; 

    [headerView setAutoresizingMask:UIViewAutoresizingNone]; 

    self.tableView.tableHeaderView = headerView; 
} 

( 'MYCustomWidget' 延伸的UIView,和 'MYCustomWidgetView' 是一个XIB文件)。

我的情况与Danny Hall's相似(表头视图是UIImageView,并且UIButton是UIImageView的子视图)。就我而言,问题似乎是由按钮是图像视图的子视图造成的。对我而言,创建一个UIView“contains”视图,使图像视图和按钮都是“包含”视图的子视图。奇怪。

tableHeaderView具有0高度同时它在处理拉伸的UITableView

使用本的UIView子类来设置强恒定的高度,而忽略的UITableView处理

#import <UIKit/UIKit.h>             
@interface CustomHeaderCell : UIView 

@end 

//----- 

@import "CustomHeaderCell.h" 

@implementation CustomHeaderCell 


-(void)setFrame:(CGRect)frame { 
    frame.size.height = 43; // !!! constant height 
    [super setFrame:frame]; 
} 

@end 

奇怪的是,表格标题视图显然不正确调整大小。 我使用自动布局,所以自动调整掩码不适合我。检查我的看法层次结构后: enter image description here

,发现我的自定义标题视图有不正确的高度,所以才把少了一半是可点击(见突出显示视图):

enter image description here

的手动更新它的高度固定的问题:

- (void)viewDidLayoutSubviews { 
    CGRect frame = self.tableView.tableHeaderView.frame; 
    frame.size.height = 116.0; 
    self.tableView.tableHeaderView.frame = frame; 
} 

enter image description here

另外,表格视图标题高度在方向更改后可能会失效。这个问题也可以通过提供的解决方案来解决。

不要忘记设置页脚高度:

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ 

我有同样的问题UIButtons行动不UITableView's头视图中工作。首先我想向setAutoresizingMask阅读.None和@Davyd的@Alexey我意识到我没有设置头的高度的答案后不工作然后查看,然后我把它想: -

self.tablevwMain.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: width_view, height: your_height) 

和所有UIButton'sUITableView's标题视图正常工作。