从 UITabBar 按钮调用的 iPhone UIActionSheet

Posted

技术标签:

【中文标题】从 UITabBar 按钮调用的 iPhone UIActionSheet【英文标题】:iPhone UIActionSheet called from UITabBar Button 【发布时间】:2009-08-03 19:49:12 【问题描述】:

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

提前致谢

【问题讨论】:

它应该是一个工具栏,你有联系按钮而不是标签栏。 【参考方案1】:

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

【讨论】:

它搞砸了它下面的视图。 哦,你的意思是你想点击标签栏在当前视图顶部打开一个操作表?..也许你可以按照我说的做,然后将前一个视图作为子视图加载到新视图中一个.. 或什么.. 为什么不拥有一个全新的视图来编写消息或其他什么? 这正是我想做的。用户不想要他们坚持操作表的新视图(他们喜欢大小和透明度)。只是想找出一种方法来做到这一点。您原来的方式会清除部分表格视图,并且永远不会显示操作表。【参考方案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;

【讨论】:

谢谢 - 请注意,这可以作为 [sheet showFromTabBar:tabBarController.tabBar] 完成,这意味着确实支持以这种方式显示 UIActionSheet。 @masty 说得好,我已经相应地调整了我的答案。并将其也改编为 ARC。【参考方案3】:

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

【讨论】:

不,邮件使用 UIToolbar,而不是您想要的 UITabBar。无论如何,您不应该做您想做的事情,UITabBars 用于在应用程序的各个部分之间导航,而不是执行一个动作(比如联系你)。【参考方案4】:

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

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

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

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

[rootController setDelegate:self];

干杯。

【讨论】:

以上是关于从 UITabBar 按钮调用的 iPhone UIActionSheet的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 在第一次 setViewControllers 调用上的状态

在 iPhone SDK 中显示 UIPickerView 时隐藏 UITabBar

iPhone + UITabBar

选择 UITabBar 时调用方法?

选择 UITableViewCell 时 UITabBar 消失

UIAlertView 更改 UITabbar 项目选定的颜色