我有一个包含三个容器的UIView
Container A - contains a UITableView Container B - contains Container C and Container O Container C - contains a UITableView * - touch event @ - touch event ---------------------- | | | | ---*| B | | --- | | | -A- | ----------- | | --- ||@----C---- | | | | ----------- | ----------------------
一个事件发生在我移动容器B的框架(我在B的右边显示一个视图(标记为O),这并不重要).现在容器B与容器A重叠
O - Other view (unimportant) $- original location of touch @ ---------------------- | | | | | --|* B | | | --| | | | -A|------------ |O| | --||@-$--C----| | | | |------------ | | ----------------------
但现在,当我尝试通过触摸行的左边缘(@)在Container C的UITableView中选择一行时,Container A的UITableView正在注册触摸.或者即使我触摸表格(*)上方的视图,也会选择A中的相应行.
我可以通过改变容器A的UITableView的宽度来解决部分问题.但是我仍然有问题,如果我触摸表C(@),C的行不选择.这就像表C的起点位于旧位置($).
那么我该怎么办才能点击新的@位置将选择C中的正确行?
=======
用一些代码编辑:
这是我在容器B中所做的代码.这是B帧的一个非常直接的动画. self.view是Container B的UIView.
所有视图都在屏幕上(隐藏“其他”容器)通过故事板.其他容器是B的子视图.
// this code basically aligns the "other" container to the right/"offscreen" of // Container B. Yes extending beyond the frame of B,but this part works fine CGRect otherContainerFrame = self.otherContainerView.frame; otherContainerFrame.origin.x = CGRectGetMaxX(self.view.frame); [self.otherContainerView setFrame:otherContainerFrame]; [self.otherContainerView setHidden:NO]; // I'm going move Container B by the width of the "other" view float offset = CGRectGetWidth(self.otherContainerView.frame); CGRect frame = self.view.frame; frame.origin.x -= offset; [UIView animateWithDuration:.35 animations:^{ [self.view setFrame:frame]; } ];
请让我知道你想看到的其他代码.
解决方法
嗯……不确定这是否适用于您的情况,但尝试在容纳所有其他容器的更大容器中管理您的动画.
我的意思是,创建一个包含A,B,O及其子视图的Container Z,并尝试从Z中设置B的位置动画,检查B是否在A前面.