如何在UIButton上捕获任何触摸事件,UIButton是UITableView的子视图

时间:2012-09-22 14:37:44

标签: objective-c ios uitableview uibutton touch

在我的应用程序中,我使用覆盖样式显示帮助信息。点击工具栏中的“信息”按钮会在当前我的主视图的任何视图上覆盖UIButton。它使用帮助文本和箭头绘制图像,指向当前导航栏和工具栏中的各种用户界面元素。

再次点击“信息”按钮会释放UIButton,但如果用户触摸此重叠按钮,我也想摆脱它。除了我的主视图控制器(UITableViewController

之外,它的工作方式非常完美

我所做的是创建UIButton并将其添加为UITableView的子视图,这是我的主视图控制器中的唯一视图。然后我将其设置为处理所有触摸事件:

[[self masterInfoView] addTarget:self action:@selector(toggleMasterInfo:) forControlEvents:UIControlEventAllTouchEvents];

UIButton的大小与它现在覆盖的表格视图大小相同,我点击它就消失了,但如果我做了一个滚动手势(点按并按住我的手指)按钮就行了不会将此视为触摸事件,而是基础表视图处理它并滚动其行,同时移动按钮。

在转移到UIButton之前,我使用了UIView和所有类型的手势识别器来实现相同的目标,以及捕获UIResponder之类的touchesBegan:withEvent:事件,一切都有合理的结果,但没有什么是完美的。

让这项工作难以实现,我缺少什么?

3 个答案:

答案 0 :(得分:0)

我试图这样做,最后我发现您需要在将单元格返回到表数据源委托时设置操作。

[customButton addTarget:self action:@selector(/*functio name*/:) forControlEvents:/*event name*/]

我希望这适合你。

答案 1 :(得分:0)

我决定,因为我的主要问题是由于我的帮助文本覆盖视图下面的表视图保持滚动,即使我不想要它,我不妨使用它:

[[self tableView] setScrollEnabled:NO];

只要帮助覆盖视图(我的UIButton)处于活动状态即可。叠加层消失后,我重新启用滚动查看表格视图。

它现在确实解决了我的问题,但它仍然没有告诉我如何让滚动事件不能通过我的叠加层进入表格视图。这可能是因为我将叠加层添加为我的表格视图的子视图。我应该创建一个包含表视图的容器视图,以避免将来出现这种情况(正如Mahmoud Fayez不知何故所建议的那样)。

答案 2 :(得分:0)

要访问表格单元格的任何子视图,请按照以下步骤操作。

1.Use the TableView delegate function of "didSelectRowAtIndexPath".
2.By above function you can get the particular index path of tabelcell.
3.Create a local object of any subview using tag value like below.

 UIButton *mybutton=(UIButton *)[[tableView cellForRowAtIndexPath:indexPath] viewWithTag:222];