В «Руководстве по мобильному интерфейсу человека» от Apple говорится о популярности:
Если возможно, разрешите людям закрывать один поповер и открывать новый
одним касанием. Такое поведение особенно желательно, когда несколько
разные кнопки на панели открывают поповер, потому что это мешает людям
от необходимости делать дополнительные краны.
Единственное решение, о котором я могу подумать сейчас, - это отслеживать положение касания при отклонении поповера и проверять, было ли это положение другой кнопки.
Есть ли более простой способ сделать это?
PS: я искал в stackoverflow и довольно долго гуглил перед публикацией. Извините, если об этом спрашивали раньше.
UPDATE
Думаю, я не очень хорошо объяснил. Допустим, у меня есть три кнопки. Все они открывают поповер. Мой пользователь нажимает кнопку # 1, и открывается всплывающее окно. Пока всплывающее окно открыто, пользователь нажимает кнопку # 2. Всплывающее окно отклоняется (потому что пользователь нажал за пределами всплывающего окна - поведение немодальных всплывающих окон по умолчанию), и открывается новое всплывающее окно, потому что пользователь нажал кнопку №2. Все это без необходимости дважды нажимать: один раз, чтобы закрыть поповер, и два раза, чтобы открыть новый.
2-е ОБНОВЛЕНИЕ
Я построил простой манекен, чтобы воспроизвести то, что я пытаюсь сделать. Когда пользователь нажимает на кнопку и открывается всплывающее окно, метод, который открывает всплывающие окна, не вызывается. Поэтому пользователь должен щелкнуть дважды, чтобы открыть второй поповер. Есть идеи?
#import "RootViewController.h"
#import "AViewController.h"
@interface RootViewController()
@property (nonatomic, retain) UIPopoverController *currentPopover;
@end
@implementation RootViewController
@synthesize currentPopover;
- (void)loadView
{
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
UIView *view = [[UIView alloc] initWithFrame:applicationFrame];
CGRect buttonFrame = CGRectMake(50, 100, 200, 40);
for (int i = 0; i < 3; i++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setTitle:[NSString stringWithFormat:@"Button %i", i + 1] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openPopover:) forControlEvents:UIControlEventTouchDown];
[button setFrame:buttonFrame];
[view addSubview:button];
buttonFrame.origin.y += 50;
}
self.view = view;
[view release];
}
- (IBAction)openPopover:(id)sender
{
AViewController *avc = [[AViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:avc];
[avc release];
UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:navigationController];
[tempPopover setDelegate:self];
[tempPopover setPopoverContentSize:CGSizeMake(320, 500)];
[tempPopover presentPopoverFromRect:[sender frame] inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
self.currentPopover = tempPopover;
[tempPopover release];
[navigationController release];
}
- (void)dealloc
{
[currentPopover release];
[super dealloc];
}
@end