имя UIView, который был тронут - PullRequest
2 голосов
/ 01 мая 2010

Как я могу получить название [touch view] в событии touchesbegan. Так что, если бы это был UIView * aaaaaview, я бы получил aaaaaview в качестве возврата; Благодарю вас, nonono

Ответы [ 3 ]

3 голосов
/ 01 мая 2010

«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]];
1 голос
/ 02 мая 2010

Или, может быть, что-то вроде этого:

if ([viewController.nibName isEqualToString:@"aaaaView"])
1 голос
/ 01 мая 2010

Параметр touches представляет собой набор UITouch экземпляров, которые имеют соответствующее свойство view:

Значением свойства является объект просмотра, в котором первоначально произошло касание.

UIView s не имеют определенного имени, но вы можете просто проверить их личность, т. Е .:

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

или используйте - (BOOL)isEqual:.

Вместо этого вы также можете использовать свойство tag, чтобы придать им значимые идентификаторы:

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

aaaview.tag = AaaView;

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

Если вам действительно нужны имена по какой-то причине, не упомянутой в вопросе, вы можете создать подкласс UIView и ввести свойство name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...