gpt4 book ai didi

uitableview - 堆叠 UITableViews 不会在其 View 下方传递触摸事件

转载 作者:行者123 更新时间:2023-12-04 02:47:00 24 4
gpt4 key购买 nike

我有 3 个 UIViews 堆叠在另一个之上

UITableview
平面 View
Root View

TableView 位于顶部,rootView 位于底部。 (rootView 不可见,因为 TableView 在它上面)

我在 rootView 中实现了以下代码

/*code in rootView*/



- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}

期望在触摸或移动最顶层的 View (即 TableView)时调用这些函数,但相反,没有调用任何函数。

我还尝试将以下代码放在 TableView 中,以便调用 rootView 方法
 /*code in TableView so that the rootView methods are called(TableView is the subview of rootView)*/

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
[self.superview touchesBegan:touches withEvent:event];
}

正如预期的那样,但问题是 TableView 代表喜欢
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath    

不被调用。

有什么方法可以确保在 TableView 类(didSelectRow:) 中实现的 TableView 委托(delegate)和 rootView 中的 touchesBegan:,touchesMoved.. 函数也相应地被调用?

即,当我单击 TableCell 时,会调用 (didSelectRow:atIndex) 函数 in--> TableView 和 (touchesBegan and touchesEnd) 方法 in-->rootView。

最佳答案

UITableView 的子类中你应该有这样的触摸方法:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.nextResponder touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}

这里的区别在于您将触摸传递给下一个响应者而不是 super View ,并且您在将触摸传递给 super 之前执行此操作。

然后在 planeView你需要像这样传递触摸:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.superview touchesBegan:touches withEvent:event];
}

请记住,这仍然可能无法完全按照您的预期工作。 UITableView在引擎盖下对响应器链进行了很多修改,以使其看起来好像 UITableView (实际上是 subview 的复杂集合)只是另一个 View ,如按钮或标签。

关于uitableview - 堆叠 UITableViews 不会在其 View 下方传递触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com