Add toolbar to UITableViewController

后端 未结 3 1720
时光说笑
时光说笑 2021-01-30 08:44

What is the simplest way to add UIToolBar to UITableViewController? I\'m depending on edit functionality, so I can\'t change UITableViewController to UIViewController easily.

相关标签:
3条回答
  • 2021-01-30 09:34
    - (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];
    
        }
    

    And in 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
    }
    
    0 讨论(0)
  • 2021-01-30 09:41

    No problem at all, UITableViewController is a subclass of UIViewController. And it so happens that in iPhone OS 3.0 any UIViewController (and subclasses) can work in conjunction with a UINavigationController to provide a context aware toolbar.

    In order for this to work you must:

    • Make sure that you use a UINavigationController to contain all your view controllers that needs a toolbar.
    • Set the toolbarsItems property of the view controller that wants a toolbar.

    This is almost as easy as as setting the view controller's title, and should be done the same way. Most probably by overriding the initWithNibName:bundle: initializer. As an example:

    -(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;
    }
    

    You can also use setToolbarItems:animated: instead of assigning to the toolbarItems property, to add and remove toolbar items in an animated fashion on the fly.

    0 讨论(0)
  • 2021-01-30 09:49

    In order to make PeyloW's recipe to work, I needed to add the following additional line of code:

    self.navigationController.toolbarHidden = NO;
    

    Hope that helps...

    0 讨论(0)
提交回复
热议问题