我的应用程序需要在操作表中添加以下内容。
我提供了一张图片,以了解我的要求。
您能否解释一下,如何实现?
最佳答案
iOS 7的更新
Apple docs for UIActionSheet:UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy
我建议不要尝试自定义ActionSheet的内容,因为它可能导致iOS 7中出现严重的无效上下文错误。我花了几个小时解决这个问题,最终决定采用其他方法。我用一个包含简单表格 View 的模态视图 Controller 替换了显示 Action 表的调用。
有很多方法可以完成此任务。这是我在当前项目中刚刚实现的一种方法。很好,因为我可以在5个或6个不同的屏幕之间重用它,所有用户都可以从这些屏幕中进行选择。
SimpleTableViewController
。 SimpleTableViewControllerDelegate
和称为itemSelectedatRow:
类型的委托(delegate)的弱属性创建协议(protocol)id<SimpleTableViewControllerDelegate>
。这是我们将选择传递回父 Controller 的方式。 itemSelectedatRow:
中调用tableView:didSelectRowAtIndexPath:
。 这种方法的另一个好处是可以相当重用。若要使用,请在您的ViewController.h中导入SimpleTableViewController类,遵循SimpleTableViewDelegate并实现
itemSelectedAtRow:
方法。然后,要打开模式,只需实例化一个新的SimpleTableViewController,设置表数据并委托(delegate),然后将其呈现。UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableVC"];
SimpleTableViewController *tableViewController = (SimpleTableViewController *)[[navigationController viewControllers] objectAtIndex:0];
tableViewController.tableData = self.statesArray;
tableViewController.navigationItem.title = @"States";
tableViewController.delegate = self;
[self presentViewController:navigationController animated:YES completion:nil];
我创建一个简单的示例posted it on github。
另请参见Showing actionsheet causes CGContext invalid context errors。