SimpleTableViewController

SimpleTableViewController

我的应用程序需要在操作表中添加以下内容。

  • UIToolbar
  • UIToolbar上的
  • 按钮
  • UIPicker控制

  • 我提供了一张图片,以了解我的要求。

    您能否解释一下,如何实现?

    最佳答案

    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个不同的屏幕之间重用它,所有用户都可以从这些屏幕中进行选择。

  • 创建一个新的UITableViewController子类SimpleTableViewController
  • 在 Storyboard(嵌入在导航 Controller 中)中创建UITableViewController并将其自定义类设置为SimpleTableViewController。
  • 为SimpleTableViewController的导航 Controller 提供一个 Storyboard ID“SimpleTableVC”。
  • 在SimpleTableViewController.h中,创建一个NSArray属性,该属性将表示表中的数据。
  • 也在SimpleTableViewController.h中,使用必需的方法SimpleTableViewControllerDelegate和称为itemSelectedatRow:类型的委托(delegate)的弱属性创建协议(protocol)id<SimpleTableViewControllerDelegate>。这是我们将选择传递回父 Controller 的方式。
  • 在SimpleTableViewController.m中,实现tableview数据源和委托(delegate)方法,并在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

    10-08 11:28