2010-05-01 57 views
2

如何获取touchesbegan事件中的[touch view]的名称。 因此,如果它是UIView * aaaaaview我会得到aaaaaview作为返回; 谢谢你, NONONO被触动的UIView的名称

+0

我米好奇你在用什么? – blindjesse 2010-05-03 04:59:43

回答

1

touches参数是一组UITouch情况下,它有一个相应的view属性:

属性的值是在最初发生触摸的视图对象。

UIView都不具备的具体名称,但你可以检查他们的身份,即:

if([touch view] == aaaview) {} 

或使用- (BOOL)isEqual:

你也可以使用tag属性,而不是给他们有意义的身份:

enum MyViews { 
    AaaView, 
    // ... 
}; 

aaaview.tag = AaaView; 

// ... 
if([touch view].tag == AaaView) {} 

如果你真的需要在问题没有提到的一些原因的名字,你可以继承UIView并引入一个name属性。

+0

我如何获得最初发生触摸的视图的名称 – 123hal321 2010-05-01 18:11:01

+2

正如gf和Frank所解释的那样,该视图不具有*名称。您可以获取该类的名称,但编译代码时不存在您在编写应用程序时使用的变量名称。在我们编程时,变量名称只是对我们的帮助。如果您只想识别视图,最快的方法是使用标签属性,您可以在其中存储和读取整数。 – Felixyz 2010-05-01 19:12:38

3

“UIView * aaaaaView”只是指内存中的某个位置。所以,如果你有

UIView *aView; 
UIView *anotherView; 
aView = anotherView; 

和用户接触一个UIView,将视图的名称是“aView”或“anotherView”?尤其是,UIView不知道用于存储变量的名称。

我想你将不得不初始化一个NSDictionary映射名称到UIViews。

东西在你的-viewDidLoad这样的,也许:

yourDictionary = [[NSDictionary alloc] initWithObjectsAndKeys: 
          @"aaaaaView", aaaaaView, @"viewTwo", viewTwo, nil]; 

,然后在事件中,你可以说

NSString *viewName = (NSString *) [yourDictionary objectForKey: [touch view]]; 
+0

'-initWithObjectsAndKeys:'应该是'nil'终止。 – kennytm 2010-05-02 06:26:48

+0

@KennyTM谢谢;修正。 – 2010-05-02 07:59:21

1

或者,也许是这样的:

if ([viewController.nibName isEqualToString:@"aaaaView"])