UITableView头中的UIButton忽略了大多数触摸

时间:2008-11-17 23:07:14

标签: iphone cocoa-touch uitableview

我有一个按钮,我将其添加为表视图的tableHeaderView的子视图。按钮看起来很好,并且它可以间歇性地按住它 - 但大多数情况下,它没有响应。我已经尝试将其添加为表格本身的子视图;效果大致相同。我认为问题可能出在滚动视图的触摸拦截上,但是禁用滚动表也没有效果。

我做错了吗?还有其他人遇到过这个吗?

编辑 - 澄清一下,我说的是分组式表格中的主表头,而不是节头。认为基本上是在“联系”屏幕之后建模的。

9 个答案:

答案 0 :(得分:23)

我遇到了同样的问题。在我的例子中,我在IB中实例化了一个容器视图(在代码中作为表视图头应用),UIImageView占用了该容器的整个框架。行为不当的按钮位于图像视图中。

原来我需要在IB中设置尺寸大小如下......

容器视图:外部锚点全部打开,内部调整大小 - 全部关闭

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

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

答案 1 :(得分:11)

我遇到了类似的问题 - 视图中的文本字段和按钮设置为表头视图,不会响应触摸事件。 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文件。)

答案 2 :(得分:8)

我完全不同意Wisequark - 在tableHeaderView中放置一个按钮绝对没有错误,并且包括一个风险你的应用程序被app Store拒绝。 tableHeaderView被设计为包含您选择的任何元素的任意视图。

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

答案 3 :(得分:3)

奇怪的是,但表标题视图显然调整不正确。 我使用自动布局,所以autoresizing mask不是我的选择。检查我的视图层次结构后: 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

此外,更改方向后,表格视图标题高度可能会变为无效。使用提供的解决方案也可以解决此问题。

答案 4 :(得分:2)

我的情况类似于Danny Hall(表头视图是UIImageView,并且有一个UIButton是UIImageView的子视图)。在我的情况下,问题似乎是由按钮是图像视图的子视图引起的。对我有用的是创建一个UIView“包含”视图,这样图像视图和按钮都是“包含”视图的子视图。奇怪。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

我在Injector标题视图中遇到了同样的问题UIButtons操作。首先我尝试了UITableView'ssetAutoresizingMask然后在阅读了@Davyd和@Alexey的答案之后我意识到我没有设置标题视图的高度然后我将它设置为: -

.None

self.tablevwMain.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: width_view, height: your_height) 标题视图中的所有UIButton's都能正常工作。

答案 7 :(得分:-1)

不要忘记将页脚高度设置为:

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

答案 8 :(得分:-7)

您应该考虑这不是headerView的预期sue,并且这样的实现可能会导致因HIG违规而拒绝AppStore。鉴于标题的尺寸要小,最好考虑重构视图。话虽如此,没有简单的方法可以做到手动检测触摸事件并自己确定几何图形,然后根据几何图形执行选择器 - 简而言之,滚动自己的按钮类。