Quiero crear UIBarButtonItems
mediante programación y colocar estos elementos de espacio fijo entre botones.¿Cómo crear espacio fijo y elementos de botón de barra espaciadora de forma programática?
Respuesta
UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
fixedItem.width = 20.0f; // or whatever you want
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *todayItem = [[UIBarButtonItem alloc] initWithTitle:@"Today" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
todayItem.tag = 2;
UIBarButtonItem *cashItem = [[UIBarButtonItem alloc] initWithTitle:@"Cash" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
cashItem.tag = 3;
UIBarButtonItem *creditItem = [[UIBarButtonItem alloc] initWithTitle:@"Credit" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
creditItem.tag = 4;
UIBarButtonItem *allItem = [[UIBarButtonItem alloc] initWithTitle:@"All" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
allItem.tag = 1;
UIBarButtonItem *returnItem = [[UIBarButtonItem alloc] initWithTitle:@"Return" style:UIBarButtonItemStylePlain target:self action:@selector(update_baritem:)];
returnItem.tag = 5;
UIBarButtonItem *fixedItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixedItem setWidth:455.0f];
UIBarButtonItem *fixed2Item = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
[fixed2Item setWidth:37.0f];
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[self.toolbar setItems:@[fixed2Item, returnItem, creditItem, cashItem, fixedItem, todayItem, flexibleItem, allItem] animated:NO];
¿Por qué está configurando * a la derecha * elementos del botón de la barra para * elementos a la izquierda *? Eso es solo un estilo realmente malo o un error y no sé cuál. –
En viewDidLoad:
//toolbar
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 416, 320, 44)];
// bar btns
UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(goBack)];
UIBarButtonItem *forwardBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(goForward)];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *bookmarkBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(bookmark)];
UIBarButtonItem *refreshBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh)];
UIBarButtonItem *stopLoadingBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(stopLoading)];
// add btns to the bar
[toolBar setItems:[NSMutableArray arrayWithObjects:bookmarkBtn,backBtn,forwardBtn,flexibleSpace,refreshBtn,stopLoadingBtn, nil]];
// adds the toobar to the view
[self.view addSubview:toolBar];
No se olvide de las acciones para cada botón también (en este ejemplo, un UIWebView):
-(void)goBack
{
[_webView goBack];
}
-(void)goForward
{
[_webView goForward];
}
etc.
Swift
// Fixed Space
let fixedSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
fixedSpace.width = 20.0
// Flexible Space
let flexibleSpace: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
Con Swift 3, UIBarButtonItem
tiene un inicializador llamada init(barButtonSystemItem:target:action:)
. init(barButtonSystemItem:target:action:)
tiene la siguiente declaración:
convenience init(barButtonSystemItem systemItem: UIBarButtonSystemItem, target: Any?, action: Selector?)
Inicializa un nuevo elemento que contiene el elemento del sistema especificado.
UIBarButtonSystemItem
es una enumeración que ofrece muchos casos incluyendo done
, play
, add
o cancel
. Sin embargo, de acuerdo con sus necesidades, también puede elegir flexibleSpace
o fixedSpace
casos.
flexibleSpace
tiene la siguiente declaración:
espacio en blanco para agregar entre otros artículos. El espacio se distribuye equitativamente entre los otros elementos. Las demás propiedades de elementos se ignoran cuando se establece este valor.
caso
fixedSpace
tiene la siguiente declaración:
espacio en blanco para agregar entre otros artículos. Solo se usa la propiedad
width
cuando se establece este valor.
Por lo tanto, puede crear elementos fijos y flexibles botón de la barra de espacio mediante programación, como se muestra a continuación:
let flexibleSpace = UIBarButtonItem(
barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace,
target: nil,
action: nil
)
let fixedSpace = UIBarButtonItem(
barButtonSystemItem: UIBarButtonSystemItem.fixedSpace,
target: nil,
action: nil
)
fixedSpace.width = 30 // Set width with the appropriate value
A modo de ejemplo, el código del patio de abajo muestra cómo agregar una barra inferior con dos elementos centrados de botón de barra de reproducción y pausa separados por un espacio fijo de 30 en una vi controlador de ew:
import PlaygroundSupport
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
title = "Home"
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Show navigation controller’s built-in toolbar
navigationController?.setToolbarHidden(false, animated: false)
// Create UIBarButtonItems
let flexibleSpace1 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
let playItem = UIBarButtonItem(barButtonSystemItem: .play, target: self, action: nil)
let fixedSpace = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
fixedSpace.width = 30
let pauseItem = UIBarButtonItem(barButtonSystemItem: .pause, target: self, action: nil)
let flexibleSpace2 = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
// Set the view controller toolbar items
setToolbarItems([flexibleSpace1, playItem, fixedSpace, pauseItem, flexibleSpace2], animated: false)
}
override func viewWillDisappear(_ animated: Bool) {
// Hide navigation controller’s built-in toolbar
navigationController?.setToolbarHidden(true, animated: true)
super.viewWillDisappear(animated)
}
}
let viewController = ViewController()
let navigationController = UINavigationController(rootViewController: viewController)
PlaygroundPage.current.liveView = navigationController
Vista previa del controlador de vista en el editor asistente de juegos usando Ver ▸ Editor Asistente ▸ Mostrar Asistente de Edición
- 1. espacio flexible frente a la barra espaciadora fija elemento del botón
- 2. Reconocer el espacio de retroceso y la barra espaciadora con jQuery
- 3. Crear un botón de ancho fijo en CSS
- 4. Botón fijo debajo de un ListView desplazable
- 5. Excel 2007 Minimiza la cinta de forma programática pero no la barra de menú
- 6. Ir a la pantalla de inicio de forma programática
- 7. Desactivación barra espaciadora desencadenar hacer clic para JButton
- 8. Creación de programas de radio de forma programática
- 9. Agregar dos elementos del botón de la barra derecha a la barra de navegación
- 10. ¿Cómo se leen las listas de SharePoint de forma programática?
- 11. ¿Cómo administro los archivos de registro WCF de forma programática?
- 12. ¿Determinando de forma programática la causa de IOException?
- 13. Compruebe si se está presionando la barra espaciadora y el mouse se está moviendo al mismo tiempo con jQuery?
- 14. jQuery: ¿evento de clic de activación en los enlaces con la barra espaciadora?
- 15. agregue id de forma programática a R.id
- 16. Crear una pila de tamaño fijo
- 17. iOS: cómo crear vistas de forma programática utilizando XIB, pero sin usar View Controller
- 18. Cómo recuperar información de forma programática desde LDAP
- 19. Android view layout_width - cómo cambiar de forma programática?
- 20. ¿Cómo encontrar tablas heredadas de forma programática en PostgreSQL?
- 21. ¿Cómo acceder a los datos del portapapeles de forma programática?
- 22. ¿Cómo rechazar una llamada entrante de forma programática en android?
- 23. JTree: Seleccionar todos los nodos de forma programática
- 24. ¿Cómo crear archivos de Visual Studio Solution (.sln) de forma programática, incluidos los proyectos del sitio web?
- 25. Colocar un elemento de botón de barra en una barra de herramientas
- 26. ¿Cómo puedo hacer que la página shift + barra espaciadora aparezca en Vim?
- 27. Ocultando el botón de barra de UINavigationItem
- 28. ¿Puedo determinar requisitos de interfaz/dependencias/herencia de forma programática?
- 29. cómo cambiar de forma programática la imagen de fondo en el formulario C#
- 30. ¿Es posible borrar de forma programática los diseños de Rails 3 y la caché de vistas?
Tenga en cuenta que para establecer el ancho de un UIBarButtonItem de espacio fijo, debe establecer la propiedad '.width'. –
respuesta perfecta! –
¿cómo podemos tener un ancho flexible dar el mismo espacio entre todos los botones usando el código? No quiero el ancho del código duro = 20.0 – Satyam