好吧,我觉得自己像个白痴,我无法让这个工作,而SO上的其他答案都没有让我到任何地方。
我有一个非常简单的UIView
我在.xib中定义并加载为tableHeaderView
的{{1}}:
UITableViewController
标题.xib的文件所有者设置为我的控制器类,到目前为止这个工作正常。我的插座连接正确,我可以将标签设置为正确的值等。
但,当我在headerView中添加UIView* headerView = [[NSBundle mainBundle] loadNibNamed:@"ProfileHeaderView" owner:self options:nil][0];
self.tableView.tableHeaderView = headerView;
时,无论我尝试什么,它都没有响应触摸。
我已经确认标题和按钮的框架是正确的,并且都UIButton
为userInteractionEnabled
。
我不能为我的生活弄清楚为什么这不起作用。我真的没有做任何我能想到的任何棘手的事情。
这里有一些调试信息:
YES
更新:我发现了一些新证据。以上内容记录在po self.tableView.tableHeaderView
<UIView: 0x17ef5420; frame = (0 0; 320 194); autoresize = W+H; layer = <CALayer: 0x17eda4a0>>
po self.loginButton
<UIButton: 0x17ec1630; frame = (80 164; 160 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x17eec760>>
内,帧的正确值。但是,如果我在viewDidLoad
中设置断点,我会注意到我的标题视图帧高度已经变为130像素!
tableView:didSelectRowAtIndexPath:
我不知道造成这种情况的原因!当然,现在我知道这一点,如果我在po self.profileHeaderView
<UIView: 0x15eb6790; frame = (0 0; 320 130); autoresize = W+H; layer = <CALayer: 0x15eb67f0>>
中明确地将帧的高度设置回194,那么它可以正常工作。但我显然想先解决一下改变框架的问题。
标题仍然正确绘制,并且在渲染时是正确的高度(194像素),但由于某种原因,它的帧在某个点上会发生变化,这会导致按钮落在其框架之外,因此不会接受接触。
像这样改变标题框架的内容是什么?我根本没有设置任何约束。
答案 0 :(得分:5)
尝试使用它,
[button sendActionsForControlEvents:UIControlEventTouchUpInside];
如果这恰当地调用了您的目标/选择器,则问题出在您的视图层次结构中。如果没有,则问题是您没有正确编码按钮的目标/选择器。
答案 1 :(得分:0)
也许你可以设置你的按钮backgroundColor是红色或其他颜色。你可以写这个'self bringSubviewToFront:xx',这意味着你将按钮设置为topView。