从tabbar应用程序中的tabbaritem调用操作表

时间:2011-09-02 20:28:30

标签: ios action tabbar

这个想法。

我正在开发一个基于TabBarController的应用程序。

有以下3个TabBarItems:

  • 主页(在导航控制器中显示homeView)
  • 内容(在导航控件中显示contentView)
  • 分享(不做它曾经做过的事)

我希望TabBarItem“Share”在当前视图中显示一个Action Sheet,而不是更改视图。

我做了什么。

通过以下几行,我可以获得“分享”-TabBarItem点击/触摸。

-(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”中,但在选择tabbaritem时不会调用该方法。

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

4 个答案:

答案 0 :(得分:0)

tabBarController: shouldSelectViewController:应该允许您以编程方式设置它。 查看详细信息here

答案 1 :(得分:0)

这是因为您在[UIApplication sharedApplication].keyWindow中显示工作表。

试试这个:

[sheet showInView:self.view];

答案 2 :(得分:0)

请勿使用[UIApplication sharedApplication] .keyWindow来显示操作。

将其替换为:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

如果您没有获得tabBarController引用,那么首先获取UItabbarcontroller的引用。

答案 3 :(得分:0)

 - (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;
}

}

希望能帮到你。