1

有没有办法直接从标签栏调用 ActionSheet。我正在开发一个程序,用户希望在选项卡栏上有一个联系按钮,该按钮显示一个带有适当按钮的操作表。

提前致谢

4

4 回答 4

2

我同意上面所有人的说法,这不是一个好主意(应该使用工具栏来完成),但这绝对是可行的。

下面的代码实现了 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;
}
于 2010-01-13T19:06:41.600 回答
2

难道你不能只拥有一个与其中一个选项卡关联的视图控制器,然后让它的视图保持原样,并在 viewDidLoad 中创建 actionSheet 吗?

于 2009-08-03T20:41:08.047 回答
1

我想我能理解史蒂夫的目的。我通过 TabBarController 中的第一个元素进行了主要活动。我希望第二个标签栏元素有选择地添加 modalview 电子邮件、对 facebook 的访问或对 twitter 的访问。如果该选择是通过操作表提供的,这样就不会忘记第一个视图控制器(来自第一个选项卡栏选项)的“背后”,然后处理该选择的新视图控制器出现。例如,当您想“分享”一篇新闻文章时,这似乎是“AP mobile”所做的。

@Adrian:我无法让您的解决方案开箱即用......但后来发现了原因(继续阅读......)

它没有帮助(显然)从 Outlet:delegate 拖到文件所有者你会得到: *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“更改由管理的选项卡栏的委托不允许使用标签栏控制器。

在我将 UITabBarControllerDelegate 添加到接口定义之前,我的委托方法被忽略了(UIApplicationDelegate 已经存在,我没有进一步阅读)......并且在 applicationDidFinishLaunching 我添加了

[rootController setDelegate:self];

干杯。

于 2010-02-01T23:36:49.997 回答
1

一个例子是邮件应用程序,当您查看电子邮件并点击弯曲箭头按钮以调出“转发 - 回复”操作表。

于 2009-08-04T00:10:17.173 回答