【发布时间】:2012-04-20 12:56:21
【问题描述】:
我有一个子视图,视图的一部分是透明的,所以对于用户来说,如果他们要在那个透明空间中触摸,那么任何可见的(但也在它下面)都应该是交互式的。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
CGPoint pt = [[touches anyObject] locationInView:self];
if (CGRectContainsPoint(tableViewUse.frame, pt)){
[self becomeFirstResponder];
}else {
[super becomeFirstResponder];
}
}
我的子视图类中有上述代码,但问题是 [super becomeFirstResponder] 调用不起作用。现在显而易见的解决方案是在我的超级视图类中调用 [self resignFirstResponder];但是,我计划在我的代码中使用这个类的许多实例,所以我必须找到触摸并将其与我的每个实例的框架等进行比较。所以优雅的解决方案是从子视图中控制所有内容。
感谢您的帮助!
P.s 刚刚注意到一个会改变我的问题的问题。如果我要让超级视图成为第一响应者,那么将在该超级视图中调用任何 touchesBegan 方法,并且必须在那里管理触摸。 eeeeeek。
【问题讨论】:
-
您是否检查过
NSLog(@"%@",self.superView");是否返回所需的输出?另外,[super becomeFirstResponder“不工作”是什么意思? 如何失败了? -
是的,确实如此。它的工作方式如下:如果代码不存在,则会表现出完全相同的行为。
-
你的父视图和你引用的子视图是同一种对象吗? superview中发生了什么?在管理超级视图的视图控制器中,您是否使用
- (BOOL)canBecomeFirstResponder { return YES; }? -
好的,我知道我现在哪里出错了。但是我不能在超级视图中设置任何对象成为第一个响应者,因为我必须在我的子视图中创建超级视图的实例,这很愚蠢。
标签: iphone objective-c sdk super