Вызов листа действий из tabbaritem в приложении tabbar - PullRequest
2 голосов
/ 03 сентября 2011

Идея.

Я занимаюсь разработкой приложения на основе TabBarController.

Существуют следующие 3 элемента TabBarItems:

  • Home(показывает homeView в контроллере навигации)
  • Content (показывает contentView в контроллере навигации)
  • Поделиться (не делает то, к чему привык)

IХотелось бы, чтобы TabBarItem "Share" отображал лист действий в текущем представлении, а не изменял представление.

Что я сделал.

С помощьюСледующие строки я могу получить "Поделиться" -TabBarItem Нажмите / Touch.

-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {

if ([item.title isEqualToString:@"Share"]) {
    actionSheet = [[UIActionSheet alloc] initWithTitle:@"Share this App" delegate:self cancelButtonTitle:@"Cancle" destructiveButtonTitle:nil otherButtonTitles:@"Share on FaceBook", nil];
    actionSheet.actionSheetStyle = UIBarStyleBlackTranslucent;
    [actionSheet showInView:[UIApplication sharedApplication].keyWindow];
    [actionSheet release];
}

Проблема.

Каждый раз, когда я выбираю "Поделиться",отображается пустое представление.

Как я могу запретить TabBarItem загружать свое представление, просто вызывая отображение листа действий?

Привет и спасибо за внимание к моей проблеме!

@ Christopher A: спасибо за ваш ответ.

Поместил следующий код в мой "projectAppDelegate.m", но метод не cразрешается при выборе вкладки.

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
if ([viewController.title isEqualToString:@"Share"]) {
    return NO;
}
return YES;

Ответы [ 4 ]

0 голосов
/ 02 августа 2013
 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController: (UIViewController *)viewController
{
//    UIActionSheet *actionSheet = nil;
switch (tabBarController.selectedIndex) {
    case 1:
    {
        NSLog(@"item 1");
        UIActionSheet *shareAS = [[UIActionSheet alloc]
                                      initWithTitle:nil
                                      delegate:self
                                      cancelButtonTitle:@"cancel"
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:@"shareToXX", @"shareToYY",nil];
        shareAS.actionSheetStyle = UIActivityIndicatorViewStyleWhite;
        shareAS.tag = 1;
        [shareAS showInView:self.window];
    }
        break;
    case 2:
    {
        NSLog(@"item 2");
       UIActionSheet *myAS = [[UIActionSheet alloc]
                                      initWithTitle:nil
                                      delegate:self
                                      cancelButtonTitle:@"cancel"
                                      destructiveButtonTitle:nil
                                      otherButtonTitles:@"AAA", @"BBB",@"CCC",@"DDD",nil];
        myAS.actionSheetStyle = UIActionSheetStyleBlackOpaque;
        myAS.tag = 2;
        [myAS showInView:self.window];
    }
        break;
    default:
        break;
}

}

надеюсь помочь вам.

0 голосов
/ 04 сентября 2011

Это потому, что вы показываете лист в [UIApplication sharedApplication].keyWindow.

Попробуйте это:

[sheet showInView:self.view];
0 голосов
/ 14 августа 2012

Не используйте [UIApplication sharedApplication] .keyWindow для отображения действия.

Заменить его на:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

Если вы не получаете ссылки на tabBarController, то сначала получите ссылку на ваш UItabbarcontroller.

0 голосов
/ 03 сентября 2011

tabBarController: shouldSelectViewController: должно позволить вам программно установить это.Проверьте детали этого здесь .

...