通过 UIActionSheet 切换视图
Posted
技术标签:
【中文标题】通过 UIActionSheet 切换视图【英文标题】:Switching views via UIActionSheet 【发布时间】:2012-01-13 23:42:35 【问题描述】:我有一个带有标准 UIView 的应用程序,其中包含一个工具栏。我可以点击工具栏上的一个按钮来打开 UIActionSheet,并且可以在那里毫无问题地显示我的文本。我想做的是让操作表项目显示与我的项目不同的 XIB。我在相关的头文件和实现文件以及 XIB 中都设置了所有内容,但我需要将点击操作表项的操作链接到显示第二个视图。
这是我目前所拥有的:
- (void)actionSheet:(UIActionSheet *)sheet willDissmissWithButtonIndex:(NSInteger)buttonIndex
if (buttonIndex != [sheet cancelButtonIndex])
if (buttonIndex == 0)
ABC *secondview = [[ABC alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:secondview animated:YES];
if (buttonIndex == 1)
DEF *secondview = [[DEF alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:secondview animated:YES];
if (buttonIndex == 2)
GHI *secondview = [[GHI alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:secondview animated:YES];
[self dismissModalViewControllerAnimated:YES];
;
这会打开我的操作表并显示所有正确信息,但点击“ABC”、“DEF”或“GHI”只会关闭操作表,就像我点击了取消按钮一样。如何设置它以便点击“ABC”、“DEF”或“GHI”在我的项目中打开不同的 XIB?
【问题讨论】:
【参考方案1】:首先修正您的方法名称:您拼错了“dismiss”。如果这是您的实际代码,则当前未调用委托方法。
跟进:
好的,我测试了你的代码(不管有没有看似不必要的dismissModalViewController...),它对我有用。
这让我觉得您的大型设置有问题。您是否设置了断点并确保您的代码实际上正在运行?
如果它没有运行(这是我的怀疑),请检查您是否未能为委托传递适当的值:当您设置 UIActionSheet 时。 (特别是,您是否可以将 nil 作为代表传递?这将导致您所描述的那种静默失败。)
您是否收到来自编译器/Clang 的任何警告?
【讨论】:
这绝对是其中的一部分。我进行了更改,但应用程序的行为没有变化。它仍然不能正确地将操作表的点击路由到适当的视图。 你一针见血:我的代表设置为“nil”。唯一的问题是——如果你已经不知道的话——我什至不知道我在做什么。我查看了有关 UI 委托协议参考的 Apple 文档,但没有得到任何结果。您是否有机会对此有进一步的了解? 开个玩笑……我把它改成了“self”,它就像一个冠军!感谢您为我指明正确的方向! 很高兴能提供帮助。别担心,每个人都从某个地方开始。如果不清楚,则需要将委托设置为实现委托方法的任何对象。在这种情况下,您的视图控制器也是委托,所以 self 是正确的。阅读“委托模式”以获取更多信息。 (顺便说一句,如果您觉得我的回答有帮助,请正式接受。;-)以上是关于通过 UIActionSheet 切换视图的主要内容,如果未能解决你的问题,请参考以下文章
iPad 上 UIPopoverController 中 UIActionSheet 的自定义背景
Swift:如何通过单击按钮 UITableVieCell 创建 UIActionSheet