У меня есть этот прекрасный актив навигационной панели:
представление navBar http://dl.dropbox.com/u/1734050/ViewWithNavBar.jpg
, и когда пользователи нажимают на среднюю кнопку (одна со стрелками), она вызывает эту другую прекрасную "окно общего доступа "asset
раскрывающийся список shareBox с navBar http://dl.dropbox.com/u/1734050/navBarWithShareBox.jpg
То, что у меня есть в коде, так это то, что при нажатии на экран появляется навигационная панель, которая исчезает при следующем нажатии.,Во-вторых, когда пользователь нажимает на кнопку «поделиться», появляется окно общего доступа, и пользователь может нажать за пределами окна, чтобы закрыть его.
Вот проблема: я не могу закрыть навигационную панель послеподнимая окно общего доступа!
Вот некоторый код:
-(void)viewDidLoad {
...
...
...
UITapGestureRecognizer *tapNavBar = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapForNavBar:)];
self.tapForNavBar = tapNavBar;
[self.viewForTaps addGestureRecognizer:self.tapForNavBar];
// btw, tapForNavBar is a UITapGestureRecognizer instance variable.
// also, viewForTaps is a view (instance variable) I made to handle
// where the user could tap (most of the screen)
}
#pragma mark -
#pragma mark Tap and Gesture Methods
-(void)handleTapForNavBar:(UIGestureRecognizer *)gestureRecognizer {
if (self.navBarIsHidden) {
[UIView animateWithDuration:0.5 animations:^ {
//self.primeViewController.view.alpha = 0.8;
self.navBar.alpha = 1.0;
}];
self.detailViewButton.userInteractionEnabled = YES;
self.shareButton.userInteractionEnabled = YES;
self.aboutAppButton.userInteractionEnabled = YES;
self.navBarIsHidden = NO;
}
else {
[UIView animateWithDuration:0.5 animations:^ {
self.navBar.alpha = 0.0;
//self.primeViewController.view.alpha = 1.0;
}];
self.detailViewButton.userInteractionEnabled = NO;
self.shareButton.userInteractionEnabled = NO;
self.aboutAppButton.userInteractionEnabled = NO;
self.navBarIsHidden = YES;
}
}
Хорошо, так что все должно выглядеть шикарно (и работает так же!) - теперь вот, пожалуй, где этостановится неортодоксальным?
-(IBAction)showShareMenu:(id)sender {
if (self.navBarShareBoxIsHidden) {
[UIView animateWithDuration:0.5 animations:^ {
self.navBarShareBox.alpha = 1.0;
}];
[self.tapForNavBar removeTarget:nil action:NULL];
UITapGestureRecognizer *tapShareBox = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapForShareBox:)];
self.tapForShareBox = tapShareBox;
[self.viewForTaps addGestureRecognizer:self.tapForShareBox];
self.navBarShareBoxIsHidden = NO;
self.twitterButton.userInteractionEnabled = YES;
self.facebookButton.userInteractionEnabled = YES;
self.googlePlusButton.userInteractionEnabled = YES;
}
else {
[UIView animateWithDuration:0.5 animations:^ {
self.navBarShareBox.alpha = 0.0;
}];
[self.tapForShareBox removeTarget:nil action:NULL];
[self.tapForNavBar addTarget:self action:@selector(handleTapForNavBar:)];
self.navBarShareBoxIsHidden = YES;
self.twitterButton.userInteractionEnabled = NO;
self.facebookButton.userInteractionEnabled = NO;
self.googlePlusButton.userInteractionEnabled = NO;
}
}
Затем я создаю этот метод для обработки конкретного нажатия на shareBox:
-(void)handleTapForShareBox:(UIGestureRecognizer *)gestureRecognizer {
if (!self.navBarShareBoxIsHidden) {
[UIView animateWithDuration:0.5 animations:^ {
self.navBarShareBox.alpha = 0.0;
}];
self.navBarShareBoxIsHidden = YES;
self.twitterButton.userInteractionEnabled = NO;
self.facebookButton.userInteractionEnabled = NO;
self.googlePlusButton.userInteractionEnabled = NO;
[self.tapForShareBox removeTarget:nil action:NULL];
[self.tapForNavBar addTarget:self action:@selector(handleTapForNavBar:)];
}
}
Я предполагаю, что моя проблема исходит от alloc
/ init
ingновый UITapGestureRecognizer
в методе -(IBAction)showShareMenu
.Я подумал, что используя сообщения removeTarget
... и addTarget
, я мог легко сказать своему коду, какой метод TapGesture он должен использовать, но, учитывая, что он не работает, я ошибся!Где я неправ?Если вам нужна дополнительная информация, я с удовольствием предоставлю больше.