【问题标题】:super becomeFirstResponder not working超级成为FirstResponder 不工作
【发布时间】: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


【解决方案1】:

试过了

[self.superview becomeFirstResponder];?

【讨论】:

  • 现在我发现我的逻辑有问题,请参阅更新后的原始问题。
  • @JamesPrince 不管你的逻辑有什么问题,[super resignFirstResponder] 是错误的。您混淆了超类和超视图,它们是完全不同的东西。
  • 我现在知道,我已经尝试了 ssteinberg 的建议,但它给了我相同的行为 - 正如我在我发表的第一条评论中指出的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多