iOS 10:UIAlertController 只显示一个动作
Posted
技术标签:
【中文标题】iOS 10:UIAlertController 只显示一个动作【英文标题】:iOS 10: UIAlertController only showing one action 【发布时间】:2016-11-03 19:41:20 【问题描述】:我有一个 UIAlertController:
UIAlertController *actionSheet = [UIAlertController
alertControllerWithTitle:@"Options"
message:@""
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *start = [UIAlertAction
actionWithTitle:@"Start"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to start. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *idle = [UIAlertAction
actionWithTitle:@"Idle"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to idle. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *stop = [UIAlertAction
actionWithTitle:@"Stop"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to stop. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *enable = [UIAlertAction
actionWithTitle:@"Enable"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to enable. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *disable = [UIAlertAction
actionWithTitle:@"Disable"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to disable. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *clear = [UIAlertAction
actionWithTitle:@"Clear"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
[self DisplayAlert:@"" textval:@"You are about to clear. Would you like to continue?"];
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
UIAlertAction *cancel = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction * action)
[actionSheet dismissViewControllerAnimated:YES completion:nil];
];
[actionSheet addAction:start];
[actionSheet addAction:idle];
[actionSheet addAction:stop];
[actionSheet addAction:enable];
[actionSheet addAction:disable];
[actionSheet addAction:clear];
[actionSheet addAction:cancel];
[actionSheet setModalPresentationStyle:UIModalPresentationPopover];
[actionSheet.view setTintColor:[UIColor blackColor]];
UIPopoverPresentationController *popPresenter = [actionSheet popoverPresentationController];
popPresenter.barButtonItem = wellControlItem;
[appDelegate.splitViewController presentViewController:actionSheet animated:YES completion:nil];
为什么在 iPad 上显示菜单时只显示这些操作之一?我在 10.1 版 iPad sim 卡和设备(两者均不适用)以及 10.1 版 iPhone 7 sim 卡和设备(适用于所有 iPhone)上对此进行了测试。
自从我在 ios 8 发布后修复它以来一直有效(添加了 setTintColor)。调试它显示添加了“7 个操作”,所以我不确定从这里去哪里获取 UIAlertControllerStyleActionSheet,这是所需的显示选项。 UIAlertControllerStyleAlert 显示所有 7 个,但我喜欢旧的 UIAlertControllerStyleActionSheet 外观。
【问题讨论】:
不相关但不要尝试从任何操作表的操作中消除操作表。当它点击一个按钮时它会自动关闭。 我有一个有点类似的问题,在模拟器上运行时只会显示我的***操作,但在设备上运行时会显示所有操作。我没有尝试更改色调颜色或 UIAlertController 的任何方面,并且显示模式是 ActionSheet。这是模拟器中的错误吗?他们都表现出同样的问题。 @RonB。我刚刚使用 UIAlertControllerStyleAlert 并称之为一天。我的新版本已经在商店里了,因为自从 iOS 8 以来 ActionSheet 弹出功能一直存在问题。为什么要打它。嘿,如果你认为这个问题是有效的,你介意投票吗?有人对一个合理的问题投了反对票,这有点烦人。当一个问题有反对票时,它就不会帮助另一个人快速浏览 【参考方案1】:在 iOS 10 下,如果您尝试设置警报控制器视图的 tintColor
,则显示带有“ActionSheet”样式的 UIAlertController
将无法正常工作。我在为 iOS 10 更新应用时遇到了这个问题。我向 Apple 提交了错误报告。
所以你的主要问题将通过不调用来解决:
[actionSheet.view setTintColor:[UIColor blackColor]];
在 iOS 10 下。
与此问题无关,您的代码错误地试图从各种警报操作中关闭警报控制器。不要这样做。警报将自动解除。您需要删除所有对以下内容的调用:
[actionSheet dismissViewControllerAnimated:YES completion:nil];
【讨论】:
请注意,只有在 UIAlertController 中有超过 5 个 UIAlertAction 时才会出现此错误。 5个或更少,一切都很好。 另外,仍然可以从 presentViewController 的 completionHandler 中设置 tintColor。从完成处理程序内部设置色调颜色可以正常工作(它不会遇到相同的 iOS 10 错误),尽管在更改之前可能会出现原始色调颜色显示的短暂闪烁。 这发生在我在 UIAlertController 中有 6 个操作时。很难找到原因,所以我只想为未来的搜索者写下“6个动作”。谢谢!以上是关于iOS 10:UIAlertController 只显示一个动作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中处理多个 UIAlertController?
iOS8 的 UIAlertController 标题始终为零
iOS9 上的 UIAlertController ActionSheet 问题