如何获取 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 触摸坐标位置的主要内容,如果未能解决你的问题,请参考以下文章