Hola, quiero crear un menú personalizado de burbujas, como menú cortar/copiar/pegar, en el iPhone SDK3.x. Sé que es UIMenuController pero solo proporciona el menú estándar de cortar/copiar/pasado. Alguien sabe cómo hacer un menú de burbujas similar a este. Cualquier ejemplo y código de referencia?Personalizar UIMenuController
Respuesta
Use la propiedad menuItems en UIMenuController.
1) es necesario agregar elementos de menú personalizado a la UIMenuController compartida:
UIMenuItem* miCustom1 = [[[UIMenuItem alloc] initWithTitle: @"Custom 1" action:@selector(onCustom1:)] autorelease];
UIMenuItem* miCustom2 = [[[UIMenuItem alloc] initWithTitle: @"Custom 2" action:@selector(onCustom2:)] autorelease];
UIMenuController* mc = [UIMenuController sharedMenuController];
mc.menuItems = [NSArray arrayWithObjects: miCustom1, miCustom2, nil];
2) que necesita para implementar los métodos de controlador en algún lugar de la cadena de respuesta de la opinión de que será de primera respuesta cuando se mostrar el menú:
- (void) onCustom1: (UIMenuController*) sender
{
}
- (void) onCustom2: (UIMenuController*) sender
{
}
3) que opcionalmente tiene que aplicar canPerformAction: en la cadena de respuesta de la opinión de que será de primera respuesta cuando se presenta el menú:
- (BOOL) canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(onCustom1:))
{
return YES; // logic here for context menu show/hide
}
if (action == @selector(onCustom2:))
{
return NO; // logic here for context menu show/hide
}
if (action == @selector(copy:))
{
// turn off copy: if you like:
return NO;
}
return [super canPerformAction: action withSender: sender];
}
4) si la vista para la que desea mostrar el menú ya no admite mostrar un menú, (es decir, un UIWebView mostrará un menú cuando el usuario hace un toque largo, pero un UILabel no tiene soporte incorporado para mostrar un menú), entonces necesita presentar el menú usted mismo. Esto se suele hacer mediante la fijación de un UILongPressGestureRecognizer a la vista, a continuación, muestra el menú de la devolución de llamada:
UILongPressGestureRecognizer* gr = [[[UILongPressGestureRecognizer alloc] initWithTarget: self action: @selector(onShowMenu:) ] autorelease];
[_myview addGestureRecognizer: gr];
- (void) onShowMenu: (UIGestureRecognizer*) sender
{
[sender.view becomeFirstResponder];
UIMenuController* mc = [UIMenuController sharedMenuController];
CGRect bounds = sender.view.bounds;
[mc setTargetRect: sender.view.frame inView: sender.view.superview];
[mc setMenuVisible: YES animated: YES];
}
Nota, tiene que haber una visión que afirma firstResponder para el menú para mostrar.
5) asegúrese de que la vista que muestra el menú devuelve SÍ/VERDADERO a canBecomeFirstResponder. Por ejemplo, si intenta hacer que un UILabel sea el primer respondedor, devolverá NO, por lo que debería subclasificarlo.
6) eso es todo. Es posible que desee resignar FirstResponder cuando se llame a la devolución de llamada de acción, pero para hacerlo deberá implementar la lógica para descubrir el primer Respondedor.
el remitente en canPerformAction no representa el objeto donde aparece el menú en/on (en mi caso una vista de texto) - ¿Alguna idea de por qué? – amok
Bien respondido, ¡buen trabajo! – gigahari
'- [FirstViewController handleGesture ::]: selector no reconocido enviado a la instancia 0x1e865800' para elemento enfocado en la página web. ¿Cómo arreglar este problema? Cuando ningún elemento dentro de la página se enfoca para ingresar texto, este método realmente funciona. – Dmitry
- 1. Artículos UIMenuController personalizados
- 2. UIMenuController no aparece
- 3. Mostrando UIMenuController pierde el teclado
- 4. Agregar voz a UIMenuController personalizado
- 5. Problemas que muestran UIMenuController uno tras otro
- 6. Personalizar android.widget.SearchView
- 7. Personalizar UISearchDisplayController
- 8. Personalizar xtable
- 9. iOS: Cómo obtener el UIMenuItem seleccionado de UIMenuController
- 10. ¿Cómo hacer que UIMenuController funcione para una vista personalizada?
- 11. ¿Cómo agrego un UIMenuItem personalizado al UIMenuController en un UITextView?
- 12. ¿Cómo personalizar MPVolumeView?
- 13. Personalizar Android ListView Colors?
- 14. JTabbedPane personalizar pestaña buscar
- 15. Liferay - personalizar cambiar contraseña
- 16. Personalizar etiquetas de ejes
- 17. Personalizar resultado jQuery autocompletado
- 18. Personalizar ActionBar TabBar (ActionBarSherlock)
- 19. Personalizar C++ afirmar macro
- 20. Personalizar animación en Raphael.js
- 21. Personalizar procesador predeterminado radioselect
- 22. Personalizar un control deslizante
- 23. Personalizar URL en AddThis
- 24. Personalizar animación UINavigationController: CATransición
- 25. JOptionPane personalizar entrada
- 26. Personalizar Python Slicing, avise
- 27. Personalizar UIPickerView (fondo y espaciado)
- 28. symfony2 personalizar formulario seleccionar opciones
- 29. file_field Botón de búsqueda personalizar
- 30. Cómo personalizar wp7 toolkit ToggleSwitch
En general, las respuestas son mucho más útiles si incluyen una explicación de lo que el código pretende hacer, y por qué eso resuelve el problema sin introducir otros –