safe que containerview container iphone cocoa-touch uiviewcontroller uinavigationcontroller uitableview

iphone - que - use container view swift 4



Agregar barra de herramientas a UITableViewController (3)

¿Cuál es la forma más sencilla de agregar UIToolBar a UITableViewController? Depende de la funcionalidad de edición, por lo que no puedo cambiar fácilmente UITableViewController a UIViewController.


Para hacer que la receta de PeyloW funcione, necesitaba agregar la siguiente línea de código adicional:

self.navigationController.toolbarHidden = NO;

Espero que ayude...


No hay problema en absoluto, UITableViewController es una subclase de UIViewController . Y sucede que en iPhone OS 3.0 cualquier UIViewController (y subclases) puede funcionar junto con un UINavigationController para proporcionar una barra de herramientas contextual.

Para que esto funcione, debes:

  • Asegúrese de utilizar un UINavigationController para contener todos los controladores de vista que necesitan una barra de herramientas.
  • Establezca la propiedad toolbarsItems del controlador de vista que quiere una barra de herramientas.

Esto es casi tan fácil como establecer el título del controlador de vista, y debe hacerse de la misma manera. Lo más probable es anulando initWithNibName:bundle: initializer. Como ejemplo:

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

También puede usar setToolbarItems:animated: lugar de asignarle a la propiedad toolbarItems , para agregar y eliminar elementos de la barra de herramientas de forma animada sobre la marcha.


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

Y en 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 }