有没有办法直接从标签栏调用 ActionSheet。我正在开发一个程序,用户希望在选项卡栏上有一个联系按钮,该按钮显示一个带有适当按钮的操作表。
提前致谢
有没有办法直接从标签栏调用 ActionSheet。我正在开发一个程序,用户希望在选项卡栏上有一个联系按钮,该按钮显示一个带有适当按钮的操作表。
提前致谢
我同意上面所有人的说法,这不是一个好主意(应该使用工具栏来完成),但这绝对是可行的。
下面的代码实现了 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;
}
难道你不能只拥有一个与其中一个选项卡关联的视图控制器,然后让它的视图保持原样,并在 viewDidLoad 中创建 actionSheet 吗?
我想我能理解史蒂夫的目的。我通过 TabBarController 中的第一个元素进行了主要活动。我希望第二个标签栏元素有选择地添加 modalview 电子邮件、对 facebook 的访问或对 twitter 的访问。如果该选择是通过操作表提供的,这样就不会忘记第一个视图控制器(来自第一个选项卡栏选项)的“背后”,然后处理该选择的新视图控制器出现。例如,当您想“分享”一篇新闻文章时,这似乎是“AP mobile”所做的。
@Adrian:我无法让您的解决方案开箱即用......但后来发现了原因(继续阅读......)
它没有帮助(显然)从 Outlet:delegate 拖到文件所有者你会得到: *** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“更改由管理的选项卡栏的委托不允许使用标签栏控制器。
在我将 UITabBarControllerDelegate 添加到接口定义之前,我的委托方法被忽略了(UIApplicationDelegate 已经存在,我没有进一步阅读)......并且在 applicationDidFinishLaunching 我添加了
[rootController setDelegate:self];
干杯。
一个例子是邮件应用程序,当您查看电子邮件并点击弯曲箭头按钮以调出“转发 - 回复”操作表。