Cocoa touch UIView比另一个UIView小

Cocoa touch UIView比另一个UIView小,cocoa-touch,Cocoa Touch,我有一个UIView高30,但我添加了一个UITableView作为子视图,其中30作为原点。y。由于表格仍在主视图下,我无法选择单元格。因此,我实施了以下方法: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"Tocco intercettato"); if (oldSet && oldEvent) { [table touchesEnded:

我有一个UIView高30,但我添加了一个UITableView作为子视图,其中30作为原点。y。由于表格仍在主视图下,我无法选择单元格。因此,我实施了以下方法:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"Tocco intercettato");
    if (oldSet && oldEvent) {
        [table touchesEnded:oldSet withEvent:oldEvent];
    }
    oldSet = touches;
    oldEvent = event;
    [table touchesBegan:touches withEvent:event];
    [table touchesEnded:touches withEvent:event];
    }

水龙头工作,但滑梯不工作,因此我无法滑动桌子。有什么想法可以解决吗

将触摸从上覆的UIView传递到下伏的UITableView不起作用(正如您所看到的,轻触会通过,但滚动动作不会)。这是因为UITableView(作为UIScrollView的一个子类)在响应器链上做了各种各样的幕后怪事(您的代码也有点奇怪,在上面的视图的touchesBegind方法中调用touchesBegind和toucheseSend,但这并不是您不能滚动表的原因)

实现所需功能的一种简单方法(假设我理解正确)是覆盖覆盖视图上的
hitTest:withEvent:
方法,并让该方法返回底层UITableView(而不是默认实现的
self
):

请注意,此代码假定
UITableView
是添加到视图控制器的第一个视图,并且覆盖的
UIView
是在该视图之后添加的

编辑:好的,重读你的问题后,我想我理解了你的问题。您有一个高度为30的主视图,并且在该视图中添加了y=30的UITableView。我认为将此方法添加到主视图将满足您的需要:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (point.y < self.frame.size.height) {
        return self;
    } else {
        return myTableView; // assumes myTableView is a reference to the
                            // UITableView that you've added
    }
}
-(UIView*)hitTest:(CGPoint)point with event:(UIEvent*)event{
if(点y<自身框架尺寸高度){
回归自我;
}否则{
return myTableView;//假定myTableView是对
//已添加的UITableView
}
}
本质上,您是在告诉操作系统,如果它们超出您的主视图的范围,则将所有触摸传递到
myTableView


但是,更简单的方法是将30像素高的主视图(橙色的东西)和UITableView添加为另一个视图(或视图控制器)的子视图。这样,您就不必做任何笨拙的事情来让您的表格表现得像普通表格一样。

将触摸从上覆的UIView传递到下覆的UITableView是不起作用的(正如您所看到的,点击会通过,但滚动动作不会)。这是因为UITableView(作为UIScrollView的一个子类)在响应器链上做了各种各样的幕后怪事(您的代码也有点奇怪,在上面的视图的touchesBegind方法中调用touchesBegind和toucheseSend,但这并不是您不能滚动表的原因)

实现所需功能的一种简单方法(假设我理解正确)是覆盖覆盖视图上的
hitTest:withEvent:
方法,并让该方法返回底层UITableView(而不是默认实现的
self
):

请注意,此代码假定
UITableView
是添加到视图控制器的第一个视图,并且覆盖的
UIView
是在该视图之后添加的

编辑:好的,重读你的问题后,我想我理解了你的问题。您有一个高度为30的主视图,并且在该视图中添加了y=30的UITableView。我认为将此方法添加到主视图将满足您的需要:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (point.y < self.frame.size.height) {
        return self;
    } else {
        return myTableView; // assumes myTableView is a reference to the
                            // UITableView that you've added
    }
}
-(UIView*)hitTest:(CGPoint)point with event:(UIEvent*)event{
if(点y<自身框架尺寸高度){
回归自我;
}否则{
return myTableView;//假定myTableView是对
//已添加的UITableView
}
}
本质上,您是在告诉操作系统,如果它们超出您的主视图的范围,则将所有触摸传递到
myTableView


但是,更简单的方法是将30像素高的主视图(橙色的东西)和UITableView添加为另一个视图(或视图控制器)的子视图。这样,您就不必做任何麻烦的事情来让您的表像普通表一样工作。

实际上,我已经在视图中添加了一个tableView作为子视图(图中为橙色)。所以我必须在我的代码中实现这个方法?正如我所怀疑的,我实际上并不理解你的问题。如果表格只是作为子视图添加的,为什么不能像平常一样单击/滚动它?我不知道你说的表视图在主视图下是什么意思。橙色视图就像一个滑块,我可以上下平移,但表是橙色视图的一个子视图,然后橙色视图高20好吧,我感谢你的检查,但是如果你的解决方案与我发布的不同,您应该将其作为您自己问题的答案发布,然后选择该答案作为正确答案。实际上,我已经在视图中添加了一个tableView作为子视图(图中为橙色)。所以我必须在我的代码中实现这个方法?正如我所怀疑的,我实际上并不理解你的问题。如果表格只是作为子视图添加的,为什么不能像平常一样单击/滚动它?我不知道你说的表视图在主视图下是什么意思。橙色视图就像一个滑块,我可以上下平移,但表是橙色视图的一个子视图,然后橙色视图高20好吧,我感谢你的检查,但是如果你的解决方案与我发布的不同,你应该把它作为你自己问题的答案,然后选择它作为正确答案。