Agregar la barra de herramientas para UITableViewController

¿Cuál es la manera más sencilla de añadir UIToolBar a UITableViewController? Estoy dependiendo de editar su funcionalidad, por lo que no puedo cambiar de UITableViewController a UIViewController fácilmente.

InformationsquelleAutor Farcaller | 2009-09-29

3 Kommentare

  1. 51

    No hay ningún problema, UITableViewController es una subclase de UIViewController. Y lo que ocurre es que en el iPhone OS 3.0 cualquier UIViewController (y subclases) puede trabajar en conjunto con un UINavigationController para proporcionar un contexto, conscientes de la barra de herramientas.

    En orden para que esto funcione, usted debe:

    • Asegúrese de que utiliza un UINavigationController para contener a todos su punto de vista de los controladores que necesita una barra de herramientas.
    • Conjunto de la toolbarsItems propiedad de la vista controlador que quiere una barra de herramientas.

    Esto es casi tan fácil como configurar el controlador de vista del título, y se debe hacer de la misma manera. Probablemente por razones imperiosas de los initWithNibName:bundle: de inicializador. Como un 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 utilizar setToolbarItems:animated: en lugar de asignar a la toolbarItems de la propiedad, para agregar y quitar elementos de barra de herramientas en una película de dibujos animados de moda sobre la marcha.

    • Es el NavigationController requiere? Quiero añadir una Barra de herramientas a un TableViewController que no es parte de un NavigationController. Qué necesito para utilizar un NavigationController aunque habrá sólo una vista en ella?
    • Sí, el UINavigationController es necesario para obtener el libre de la barra de herramientas de manipulación. Sin él debe gestionar su propia UIToolbar vista de la instancia.
    • ¿y si no quiero poner los botones de esta barra de herramientas, en lugar de eso, quiero poner solo una imagen en el centro, ¿qué haría de manera diferente? Gracias.
  2. 40

    Con el fin de hacer PeyloW la receta de trabajar, tuve que agregar la siguiente línea de código:

    self.navigationController.toolbarHidden = NO;

    Esperanza de que ayuda a…

    • De acuerdo. Tuve que poner la llamada en el método viewDidLoad, no la initWithNibName anular. A continuación, funciona muy bien.
    • A mí me ha funcionado: self.navigationController?.isToolbarHidden = false;
  3. 13
    - (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
    }
    • Esto funciona muy bien para mí. Yo no se pudo agregar una UINavigationController, para agregar manualmente una barra de herramientas era la única manera de ir. Gracias!
    • De niza. Creo que esto debe ser aceptado respuesta. Yo quería a agregar una barra de herramientas para uitableviewcontroller, no permitiendo uinavigationcontroller.
    • Esto funcionó bien para mí, pero en lugar de añadir UIBarButtonItems he añadido una vista con un botón de un guión a la barra de herramientas. Cuando se compila por Xcode 7.2.1 esta trabajado en dispositivos de hasta iOS11.4.1 (no probado en iOS12). Cuando comencé a utilizar Xcode 9.2 y Xcode 10, el botón no responde en los dispositivos o simulador ejecuta iOS11+ (pero lo hizo en el simulador ejecuta iOS9 un 10). La ‘solución’ que se me ocurrió fue quitar y volver a crear la barra de herramientas (de nuevo) en viewDidAppear. La creación de la barra de herramientas en viewDidAppear y no también en viewWillAppear no funciona.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea