如何在iPhone应用程序中记录所有用户的触摸

时间:2010-10-13 14:48:02

标签: ios objective-c cocoa-touch logging

注意:这是我昨天问过的a question的扩展(和澄清)。

我正在进行一项研究项目,我希望在iPhone应用程序中记录所有用户的触摸。在实验之后,我将能够下载数据并在Excel或(更可能)Matlab中处理它,并确定他们点击某些按钮的次数,当他们点击某些按钮等时。为此,我需要要知道:

a)当他们碰到时

b)他们碰到的地方

c)他们触摸了哪个视图

前两个很容易,但第三个我遇到了麻烦。我知道我可以这样做以获得被触及的UIView的引用:

CGPoint locationPoint = [[touches anyObject] locationInView:self];
UIView* viewYouWishToObtain = [self hitTest:locationPoint withEvent:event];

但是,这只会给我一个指向视图的指针,而不是被触摸的视图的名称。我可以为每个视图分配一个标签,但是每次我创建一个新视图时我都需要记住标记它(或者,在初始化时记录每个视图的地址并在触摸视图时记录它)。对UIView进行子类化并添加自动标记实际上不是一个选项,因为我正在创建其他UIButtons和UISliders,并且还需要对它们进行子类化,这似乎不是一个非常好的解决方案。

有谁知道干净,简单的方法吗?

3 个答案:

答案 0 :(得分:1)

你可以在UIView中添加一个类别,然后由所有UIView后代对象继承,尽管我不确定它比标记更有效。由于类别可以覆盖方法,因此您可以覆盖自动标记的init方法,我认为。

http://macdevelopertips.com/objective-c/objective-c-categories.html

答案 1 :(得分:1)

对于“他们触摸了哪个视图”,您需要哪些信息?

也许您可以使用类别向UIView添加方法。此方法将生成包含有关视图的信息的字符串。如:

  • 其类型,例如UIButton等。
  • 其大小和位置
  • 视图的标题,如果它有一个(例如按钮标题)
  • 父视图类型和标题
  • 其他东西,例如是视图已启用,它处于什么状态。你喜欢什么。

例如:“Type:UIButton Title:”Back“Rect:{3,5,40,25}”或某些此类字符串。

这非常干净,可以为您提供大量信息。

答案 2 :(得分:0)

我不确定你对视图“名称”的意思。如果您指的是Interface Builder中的视图名称,我不认为它包含在实例化对象中。您可以使用包含的Tag属性,但这只是一个数字,而不是名称。