【发布时间】:2012-11-16 08:28:09
【问题描述】:
我想实现以下目标。
场景:iOS 键盘在用户输入特定文本字段时显示在屏幕上。用户可以点击键盘和文本字段之外的任何地方来关闭键盘(无需激活任何可见的按钮)。此外,用户可以拖动到键盘外并观察一些可滚动视图排列的正常拖动行为。
从概念上讲,我在大部分屏幕上放置了一个“封面”UIView,其行为如下:
如果用户点击封面,我会捕捉该点击(这样我就可以关闭键盘)。这很容易通过在
UIView子类中拦截触摸事件或使用轻击手势识别器来实现。如果用户在封面上拖动,则封面忽略或向前这些触摸;这些被下面的层接收,就像没有覆盖一样。
所以:用户应该能够滚动封面下方的内容,但不能点击封面下方的内容。在键盘和文本字段的“外部”轻按应该会关闭键盘(和覆盖),但不应激活任何东西。
我怎样才能做到这一点?
【问题讨论】:
-
您必须考虑实现触摸委托方法并将触摸传递给其背后的视图以进行滑动。
- (void) touchesBegan:(NSSet*) touches withEvent:(UIEvent*)event{ [otherView touchesBegan:touches withEvent:event]; }另一种方式是实现,UIPanGestureRecognizer,设置cancelsTouchesInView = YES为UIPanGestureRecognizer *gr = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan)]; [gr setCancelsTouchesInView:YES]; [myButton addGestureRecognizer:gr]; [gr release]; -
@mjh,你找到解决办法了吗?
标签: ios xcode user-interface uiscrollview gestures