如何获取 UItextview 触摸坐标位置

Posted

技术标签:

【中文标题】如何获取 UItextview 触摸坐标位置【英文标题】:how to get UItextview touch coordinate position 【发布时间】:2011-03-14 09:53:50 【问题描述】:

我需要通过触摸视图来获取坐标位置。我触摸的视图是 UITextview。视图的层次结构是 UIViewController -> UITextview。我想我可以使用locationInView 方法来获取该坐标。我知道 UITextview 有一些委托方法,所以我想我必须使用textViewShouldBeginEditing 委托方法来调用 locatioInView。

这是我的代码 sn-p

-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 

  NSSet *touches;
  UITouch *touch = [touches anyObject];

  CGPoint currentTouchPosition = [touch locationInView:textView];
  NSLog(@"currentTouchPosition: x=%f, y=%f", currentTouchPosition.x, currentTouchPosition.y);

  return YES;

我的问题是,currentTouchPosition 在 x 和 y 中总是有 0 值。我不知道该代码有什么问题。 谁能告诉我???

谢谢

更新 最后我解决了这个问题。我在 viewDidLoad 中使用了 UITapGestureRecognizer,然后使用我在 textViewShouldBeginEditing 中使用的相同方法获取点击位置。这是我制作的代码:

- (void)viewDidLoad 
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
tap.delegate=self;
[self.textView addGestureRecognizer:tap];
tap.numberOfTapsRequired = 1;

[tap release];

这是 handleTapFrom :

- (void)handleTapFrom:(UITapGestureRecognizer *)recognizer 

locationTap = [recognizer locationInView:self.textView];


【问题讨论】:

【参考方案1】:

您只需声明一个 NSSet 对象并从中检索数据,这总是空的。 获取 UITextView 的子类并在其中写下 touch begin 方法,即-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event。然后,参数 touches 将为您提供视图上的正确触摸点。使用您的子类对象作为您的 TextView。

【讨论】:

感谢您的回答,我正在尝试,我创建了一个名为 customTextView 的 UITextview 的子类,但在这个应用程序中,此方法从未触发 您是否在您的 customTextView 中为“touchesBegan”方法定义了正文 是的,我是定义代码的,它和我在上面的 textViewShouldBeginEditing 中所做的完全一样,但它在调试器中没有 nslog 打印 你应该在你的方法中使用参数中的 touch 变量。你可以通过点击手势解决这个问题。 是的......我终于解决了这个问题,但它给了我另一个错误,在水龙头中触发的选择器方法有时在 textviewDidChangeSelection 委托方法之后调用,有时在它之前调用。我需要在那个委托方法之前调用它,你知道如何修复它吗??

以上是关于如何获取 UItextview 触摸坐标位置的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

如何从 Swift 中的 valueChanged 事件中获取触摸坐标

如何在 UIWebView 中获取(X,Y)触摸坐标

无论我可能触摸过啥“视图”,如何获取触摸坐标?

UITextview 光标移动到行尾