2013-08-23 2 views
1

Я создаю меню в качестве подкласса UIControl, которое открывается, когда пользователь прикасается к нему и закрывается, если пользователь не выбирает одну из своих опций.След UIControl касается вне его вида

Я ищу способ, чтобы отслеживать, когда пользователь прикасается снаружи, так что я могу закрыть меню

ответ

0

Положите один вид сзади меню, которые охватывают всю область вашего устройства с фоном прозрачного цвета. когда ваше меню открыто, этот вид будет виден. поскольку он имеет такую ​​же высоту и ширину, что и ваше устройство, когда вы нажимаете вне меню, вы можете идентифицировать этот вид с помощью TapGesture или сделать его UIControl. чем метод вызова, чтобы скрыть как ваше меню, так и uiview.

Надеюсь, это поможет.

+0

Хм ... Я не думаю, что это то, что я ищу. Я ищу, чтобы определить, когда пользователь взаимодействует с другими элементами управления. Если я сделаю один размер кадра, он не будет передавать касания. –

0

Что мне действительно нравится делать, так это сделать большую кнопку, которая покрывает весь вид, а также под ним или что-то еще, от чего я хочу отвлечься, и что-то случилось.

UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.view.frame]; 
    [bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown]; 
    [bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]]; 
    [self.view addSubview:bigBackButton]; 

} 
- (void)backButtonSelected:(UIButton *)button { 
    //get rid of the button 
    [button removeFromSuperview]; 

    //do whatever else you need to do 
    [yourmenu dosomething]; 
} 

В некоторых приложениях я сделаю кнопку темной и полупрозрачной, чтобы выделить меню, что бы то ни было. В других случаях я сделаю это почти невидимым, например [UIColor colorWithWhite:1.0 alpha:0.01];

в вашем меню вы можете добавить эти же подпрограммы. Вы можете передать кадр родительского представления или просто посмотреть его в подпрограмме layoutSubviews, если ваше меню является подкачкой UIView.

в ваших layoutSubviews, добавьте это:

UIButton *bigBackButton = [[UIButton alloc]initWithFrame:self.superview.frame]; 
    [bigBackButton addTarget:self action:@selector(backButtonSelected) forControlEvents:UIControlEventTouchDown]; 
    [bigBackButton setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]]; 
    [self.view addSubview:bigBackButton]; 

, а затем положить метод backButtonSelected в классе меню, а также.

+0

Хм .... Я подумал о чем-то подобном, но я ищу, чтобы он был в рамках класса моего меню. Таким образом, я могу просто добавить его в любой вид, который я хочу, когда захочу, и не нужно беспокоиться о добавлении других вещей, чтобы заставить его работать. –

+0

Нет причин, по которым вы не могли бы добавить эти процедуры как часть своего класса меню. (см. править) – HalR