2015-08-27 1 views
3

Так что я использую этот Menu от github. В настоящее время меню открывается при нажатии и втягивается, если вы снова нажмете кнопку крана, но я также хочу, чтобы меню отводилось, если пользователь нажимает в другом месте на экране, кроме кнопок. Проблема, с которой я сталкиваюсь, заключается в том, что я реализую это в navbar с помощью tabbarcontroller, что происходит, если я нажимаю кнопку, чтобы открыть меню, а затем нажмите на другую вкладку, не сворачивая меню пузырьков. И затем, если я вернусь на ту же вкладку, меню пузырька все еще открыто, но в коде все еще думает, что оно рухнуло, что приводит к странному поведению добавления другого подвэйла в любые предложения?Отключение меню, если в любом месте на экране iOS?

Ниже приведен пример того, как это работает сейчас. А вот link to the Code. enter image description here

+0

Я вижу, что в исходном коде есть функция с именем «увольнение». Возможно, вы хотите позвонить ему в соответствующее время. – FlySoFast

+0

Я тоже прошел через это. Я просто не знаю, как обнаружить внешнее прикосновение, поэтому я могу вызвать функцию отпущенных кнопок. – jasan

ответ

5

Есть 2 подхода:

Первый подход:

Вы можете установить метку для ваших кнопок и других представлений, которые вы не хотите, меню должно быть отклонено, когда они получают похлопал:

button.tag=99; 
button2.tag=99; 
backgroundImage.tag=99; 

И тогда в вашем ViewController, используйте touchesBegan:withEvent: делегат

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 


    UITouch *touch = [touches anyObject]; 

    if(touch.view.tag!=99){ 
     //Call your dismiss method 
    } 

} 

Второй подход:

Если есть наложение для ваших кнопок (например, фон, чтобы выделить ваши кнопки и заполнить все ваше представление), вы можете добавить к нему UITapGestureRecognizer и добавить его в свое представление каждый раз, когда вы хотите, чтобы ваш пользовательский просмотр отображался. Вот пример:

UIView *overlay; 

-(void)addOverlay{ 
    //Add the overlay, if there's one in your code, then you don't have to create this 
     overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0,self.view.frame.size.width, self.view.frame.size.height)]; 
    [overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]]; 

    //Register the tap gesture recognizer 
    UITapGestureRecognizer *overlayTap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self 
             action:@selector(onOverlayTapped)]; 

    [overlay addGestureRecognizer:overlayTap]; 

    [self.view addSubview:overlay]; 
} 


- (void)onOverlayTapped 
{ 
    //Call your dismiss method 

    for (UITapGestureRecognizer *ges in previewOverlay.gestureRecognizers) { 
     [overlay removeGestureRecognizer:ges]; 
    } 
    [overlay removeFromSuperview]; 

} 

Вы можете увидеть my answer здесь для подобного случая.

+0

Теперь я могу обнаружить наложенное наложение и распечатать сообщение на консоли, однако я попытался вызвать метод «пуск» следующим образом: DWBubbleMenuButton(). ОтключитьButtons() и ничего не происходит – jasan

+0

ну, это выходит за рамки сферы этого вопроса, но я думаю, вы должны сделать отдельный тест, в котором вы хотите просто отклонить кнопки любым способом. Как только вы это сделаете, попробуйте объединить их в один. – FlySoFast

+0

Красота быть новичком, столкнувшись с проблемой теперь после того, как меню отклонено, прозрачное оверлей все еще имеет взаимодействие и не позволит взаимодействовать с контроллером представления – jasan

1
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     super.touchesBegan(touches, withEvent: event) 
     //retract menu 
} 

Эта функция определяет фоновый кран.

+0

. Я называю это в контроллере? Я использую меню? и как бы я отличал сенсорные кнопки меню от остального экрана контроллера вида? – jasan

1

Я использовал FlysoFast код и превратили его в Swift, чтобы обнаружить внешний кран:

self.overlay = UIView(frame: UIScreen.mainScreen().bounds) 
self.overlay.backgroundColor = UIColor.clearColor() 
downMenuButton.delegate = self 
let tap = UITapGestureRecognizer(target: self, action: Selector("bubbleMenuButtonShouldCollapse")) 

tap.numberOfTapsRequired = 1 
self.overlay.addGestureRecognizer(tap) 
self.overlay.addSubview(downMenuButton) 
self.navigationController!.view.addSubview(overlay) 

Затем я использовал следующий код:

func bubbleMenuButtonShouldCollapse() { 
    println("Overlay tapped") 
    self.downMenuButton.dismissButtons() 
} 

разрушиться меню.