pra*_*jul 6 uitableview uiview uievent
我有3个UIViews堆叠在另一个上面
UITableview
planeView
rootView
TableView位于顶部,rootView位于底部.(因为TableView位于其上,因此rootView不可见)
我在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 {}
Run Code Online (Sandbox Code Playgroud)
期望在触摸或移动最顶层视图(即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];
}
Run Code Online (Sandbox Code Playgroud)
正如所料,它确实如此,但问题是TableView代表喜欢
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
不叫.
是否有任何方法可以确保在TableView类(didSelectRow :)中实现的TableView委托和rootView中的touchesBegan:,touchesMoved ..函数也相应地调用?
即,当我点击TableCell中的两个(didSelectRow:atIndex)函数 - > TableView和(touchesBegan和touchesEnd)方法 - > rootView被调用.
在你的子类中,UITableView
你应该有这样的触摸方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.nextResponder touchesBegan:touches withEvent:event];
[super touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
这里的不同之处在于,您将触摸传递给下一个响应者而不是超级视图,并且在将触摸传递给超级之前您正在执行此操作.
然后在planeView
你需要传递这样的接触:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.superview touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)
请记住,这仍然可能无法完全按预期工作.UITableView
在引擎盖下做了很多响应者链的修改,以使它看起来好像一个UITableView
(实际上是一个复杂的子视图集合)只是另一个视图,如按钮或标签.
归档时间: |
|
查看次数: |
3209 次 |
最近记录: |