gpt4 book ai didi

iphone - 处理UIScrollView中UITextField的touchesBegan方法

转载 作者:行者123 更新时间:2023-12-03 20:22:38 24 4
gpt4 key购买 nike

我这里遇到一个情况,我必须处理文本字段的touchesBegan。该文本字段位于 ScrollView 中。

到目前为止我尝试过:

我创建了 UIScrollView 的子类

@interface CustomScrollView : UIScrollView
{
}
@end

@implementation CustomScrollView

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"good");
}

@end

在这里,我可以获得想要的结果。

我用文本字段实现了同样的事情。我创建了 UITextField 的子类:

@interface CustomTextField : UITextField
{
}
@end

@implementation CustomTextField

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
NSLog(@"good");
}

@end

如果文本字段位于普通 View 内,则效果很好,但当文本字段位于常规 ScrollView 或我的自定义 ScrollView 内时,它会失败。

请赐教一下

(我这样做是为了实现这样的效果,当用户长按文本字段时,文本字段中的文本将从文本字段分配给标签,并且用户可以将此标签拖动到 View 中的其他位置)

最佳答案

默认情况下,UIScrollView 会延迟向其 subview 发送触摸事件,直到它可以确定触摸是否会导致滚动。您可以通过点击并按住文本字段来证明这一点 - TouchBegan 将在片刻后触发。

要解决此问题,只需将自定义 ScrollView 的delaysContentTouches 属性设置为NO。这可以通过界面生成器取消选中“延迟内容触摸”来完成。在代码中,只需执行类似于以下内容的操作:

_myCustomScrollView.delaysContentTouches = NO;

您的 CustomTextField 的 TouchBegan 方法现在将立即触发。但请注意,如果用户最初点击的是任何 subview 内,则他们将无法再在 CustomScrollView 内滚动。将delaysContentTouches设置为no,尝试点击文本字段(或任何与此相关的 subview )内部并滑动 - 您将看到没有发生滚动。当delayContentTouches设置为yes时,用户可以从CustomScrollView范围内的任意位置点击并滑动并使其滚动。

如果您想要两全其美(用户从任何地方滚动以及 subview 可以响应触摸),您可以重写 CustomScrollView 中的 hitTest 方法并向已触摸的 subview 发送消息。这是 CustomScrollView 中的实现:

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent*)event {
UIView *hitView = [super hitTest:point withEvent:event];

if([hitView class] == [CustomTextField class]) {
[(CustomTextField *) hitView handleTap:point];
}

return hitView;
}

这是 CustomTextField 实现:

@interface CustomTextField : UITextField {

}

-(void) handleTap:(CGPoint) point;

@end

@implementation CustomTextField

-(void) handleTap:(CGPoint) point {
// Implement your handling code here
}

@end

这是一个 hack,因为它并没有真正处理触摸(touchesBegan、touchesEnded 等),但它确实有效。

关于iphone - 处理UIScrollView中UITextField的touchesBegan方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com