【问题标题】:How to catch any touch event on a UIButton that is a subview of a UITableView如何捕捉作为 UITableView 子视图的 UIButton 上的任何触摸事件
【发布时间】:2012-09-14 17:04:56
【问题描述】:

在我的应用程序中,我使用叠加样式来呈现帮助信息。点击工具栏中的信息按钮会在我当前主视图的任何视图顶部覆盖UIButton。它绘制带有帮助文本和箭头的图像,指向当前导航栏和工具栏中的各种用户界面元素。

再次点击信息按钮会释放UIButton,但如果用户触摸这个覆盖的按钮,我也想摆脱它。除了我的主视图控制器 UITableViewController 之外,它工作得很好。

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

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

UIButton 与它现在覆盖的表格视图大小相同,我点击它时它会消失,但如果我做出滚动手势(在其中点击并按住我的手指)按钮看不到这是一个触摸事件,而不是底层表视图处理它并滚动其行,同时移动按钮。

在使用UIButton 之前,我使用UIView 和各种手势识别器来实现相同的目标,并捕获UIResponder 事件,如touchesBegan:withEvent:,所有结果都合理但并不完美。

完成这项工作并没有那么难,我错过了什么?

【问题讨论】:

    标签: objective-c ios uitableview uibutton touch


    【解决方案1】:

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

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

    ;

    我希望这对你有用。

    【讨论】:

    • 我的UIButton 不是我在表格视图中返回一行的单元格的一部分。相反,它与整个表格重叠,当时它会显示整个屏幕的帮助信息,一旦点击,它应该会消失。只需轻按它就可以了,但是进行滚动运动会滚动底层表格视图,这也会随着它向上或向下移动我的按钮。
    • 在 sib 文件中创建两个视图,其中一个仅用于按钮,并使其背景透明。然后将所有其他 UI 元素移动到其他视图。
    • 我想添加一个额外的容器视图来保存表格视图,并且我可以在其中为我的叠加帮助文本添加一个额外的子视图,但我在这篇文章下面的答案中找到了一种解决方法。
    【解决方案2】:

    我决定,由于我的主要问题是由于我的帮助文本覆盖视图下方的表格视图会持续滚动,即使我不想要它,我也不妨使用它:

    [[self tableView] setScrollEnabled:NO];
    

    只要帮助覆盖视图(我的UIButton)处于活动状态。覆盖层消失后,我会重新启用表格视图的滚动功能。

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

    【讨论】:

      【解决方案3】:

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

      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];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多