name of UIView that was touched

2019-02-15 19:24发布

How can I get the name of the [touch view] in the touchesbegan event. So if it were UIView *aaaaaview I would get aaaaaview as the return; Thank You, nonono

3条回答
贼婆χ
2楼-- · 2019-02-15 19:58

Or maybe something like this:

if ([viewController.nibName isEqualToString:@"aaaaView"])
查看更多
一夜七次
3楼-- · 2019-02-15 20:07

The touches parameter is a set of UITouch instances, which have a corresponding view property:

The value of the property is the view object in which the touch originally occurred.

UIViews don't have a specific name, but you can just check for their identity, i.e.:

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

or use - (BOOL)isEqual:.

You could also use the tag property instead to give them meaningful identities:

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

aaaview.tag = AaaView;

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

If you really need names for some reason not mentioned in the question, you could subclass UIView and introduce a name property.

查看更多
时光不老,我们不散
4楼-- · 2019-02-15 20:08

"UIView *aaaaaView" just refers to a place in memory. So if you had

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

and the user touched a UIView, would the view's name be "aView" or "anotherView"? In particular, a UIView has no knowledge of the name of the variable you use to store it.

I think you're going to have to initialise an NSDictionary mapping names to UIViews.

Something in your -viewDidLoad like this, perhaps:

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

and then in your event you can say

NSString *viewName = (NSString *) [yourDictionary objectForKey: [touch view]];
查看更多
登录 后发表回答