iPhone UIActionSheet вызывается из кнопки UITabBar - PullRequest
1 голос
/ 03 августа 2009

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

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 13 января 2010

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

Код ниже реализует один из методов UITabBarControllerDelegate и избегает выбора элемента панели вкладок, а вместо этого создает и отображает UIActionSheet:

-   (BOOL)tabBarController:(UITabBarController *)tabBarController 
shouldSelectViewController:(UIViewController *)viewController
{
    NSInteger choice = 0; // --> index of the view controller that should "act as button"
    if (viewController == [tabBarController.viewControllers objectAtIndex:choice])
    {
        UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:nil 
                                                           delegate:nil 
                                                  cancelButtonTitle:@"Cancel" 
                                             destructiveButtonTitle:nil
                                                  otherButtonTitles:@"Send e-mail", @"Twitter", @"Whatever", nil];
        [sheet showFromTabBar:tabBarController.tabBar];
        return NO;
    }
    return YES;
}
2 голосов
/ 04 августа 2009

Не могли бы вы просто связать контроллер представления с одной из вкладок, а затем оставить его представление простым и в viewDidLoad создать actionSheet?

1 голос
/ 02 февраля 2010

Я думаю, что могу понять, что за Стивом. У меня есть основное действие, достигнутое через 1-й элемент в TabBarController. Мне бы хотелось, чтобы второй элемент панели вкладок по выбору добавлял либо электронное письмо с модалом, либо доступ к Facebook, либо к Twitter. Было бы неплохо, если бы этот выбор был предложен через лист действий, чтобы не упускать из виду то, что «позади» этого первого контроллера представления (из первого выбора панели вкладок), и ТОГДА появляется новый контроллер представления, обрабатывающий этот выбор. Это похоже на то, что делает «AP mobile», например, когда вы хотите «поделиться» новостной статьей.

@ Адриан: Я не мог заставить ваше решение работать "из коробки" ... но потом выяснил почему (читай дальше ...)

Это не помогает (очевидно) специально перетаскивать из Outlet: делегировать владельцу файла Ты получишь: *** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Изменение делегата панели вкладок, управляемой контроллером панели вкладок, не допускается». *

Мой метод делегата игнорировался, пока я не добавил UITabBarControllerDelegate в определение интерфейса (UIApplicationDelegate уже присутствовал, и я не читал дальше) ... А ТАКЖЕ В приложение DidFinishLaunching я добавил

[rootController setDelegate:self];

Приветствие.

1 голос
/ 04 августа 2009

Примером почтового приложения может быть просмотр электронной почты и нажатие кнопки с изогнутой стрелкой, чтобы открыть лист действий «вперед - ответ».

...