将工具栏添加到UITableViewController

将UIToolBar添加到UITableViewController最简单的方法是什么? 我依赖于编辑function,所以我不能轻松地将UITableViewController更改为UIViewController。

没有问题, UITableViewControllerUIViewController的子类。 而且恰巧在iPhone OS 3.0中,任何UIViewController (和子类)都可以与UINavigationController一起使用,以提供一个上下文感知工具栏。

为了这个工作,你必须:

  • 确保使用UINavigationController来包含需要工具栏的所有视图控制器。
  • 设置需要toolbarsItems的视图控制器的toolbarsItems属性。

这和设置视图控制器的标题一样简单,并且应该以同样的方式完成。 很可能通过重写initWithNibName:bundle: initializer。 举个例子:

 -(id)initWithNibName:(NSString*)name bundle:(NSBundle*)bundle; { self = [super initWithNibName:name bundle:bundle]; if (self) { self.title = @"My Title"; NSArray* toolbarItems = [NSArray arrayWithObjects: [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addStuff:)], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(searchStuff:)], nil]; [toolbarItems makeObjectsPerformSelector:@selector(release)]; self.toolbarItems = toolbarItems; self.navigationController.toolbarHidden = NO; } return self; } 

您还可以使用setToolbarItems:animated:而不是分配给toolbarItems属性,以dynamic方式添加和删除工具栏项。

为了使PeyloW的食谱工作,我需要添加以下额外的代码行:

 self.navigationController.toolbarHidden = NO; 

希望有帮助…

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; //Initialize the toolbar toolbar = [[UIToolbar alloc] init]; toolbar.barStyle = UIBarStyleDefault; //Set the toolbar to fit the width of the app. [toolbar sizeToFit]; //Caclulate the height of the toolbar CGFloat toolbarHeight = [toolbar frame].size.height; //Get the bounds of the parent view CGRect rootViewBounds = self.parentViewController.view.bounds; //Get the height of the parent view. CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds); //Get the width of the parent view, CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds); //Create a rectangle for the toolbar CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight); //Reposition and resize the receiver [toolbar setFrame:rectArea]; //Create a button UIBarButtonItem *infoButton = [[UIBarButtonItem alloc] initWithTitle:@"back" style:UIBarButtonItemStyleBordered target:self action:@selector(info_clicked:)]; [toolbar setItems:[NSArray arrayWithObjects:infoButton,nil]]; //Add the toolbar as a subview to the navigation controller. [self.navigationController.view addSubview:toolbar]; [[self tableView] reloadData]; } - (void) info_clicked:(id)sender { [self.navigationController popViewControllerAnimated:YES]; [toolbar removeFromSuperview]; } 

而在Swift 3:

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) //Initialize the toolbar let toolbar = UIToolbar() toolbar.barStyle = UIBarStyle.default //Set the toolbar to fit the width of the app. toolbar.sizeToFit() //Caclulate the height of the toolbar let toolbarHeight = toolbar.frame.size.height //Get the bounds of the parent view let rootViewBounds = self.parent?.view.bounds //Get the height of the parent view. let rootViewHeight = rootViewBounds?.height //Get the width of the parent view, let rootViewWidth = rootViewBounds?.width //Create a rectangle for the toolbar let rectArea = CGRect(x: 0, y: rootViewHeight! - toolbarHeight, width: rootViewWidth!, height: toolbarHeight) //Reposition and resize the receiver toolbar.frame = rectArea //Create a button let infoButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: self, action: #selector(infoClicked)) toolbar.items = [infoButton] //Add the toolbar as a subview to the navigation controller. self.navigationController?.view.addSubview(toolbar) } func infoClicked() { //Handle Click Here }