注意:这是我昨天问过的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,并且还需要对它们进行子类化,这似乎不是一个非常好的解决方案。
有谁知道干净,简单的方法吗?
答案 0 :(得分:1)
你可以在UIView中添加一个类别,然后由所有UIView后代对象继承,尽管我不确定它比标记更有效。由于类别可以覆盖方法,因此您可以覆盖自动标记的init方法,我认为。
http://macdevelopertips.com/objective-c/objective-c-categories.html
答案 1 :(得分:1)
对于“他们触摸了哪个视图”,您需要哪些信息?
也许您可以使用类别向UIView添加方法。此方法将生成包含有关视图的信息的字符串。如:
例如:“Type:UIButton Title:”Back“Rect:{3,5,40,25}”或某些此类字符串。
这非常干净,可以为您提供大量信息。
答案 2 :(得分:0)
我不确定你对视图“名称”的意思。如果您指的是Interface Builder中的视图名称,我不认为它包含在实例化对象中。您可以使用包含的Tag属性,但这只是一个数字,而不是名称。