inicio - como desactivar el boton home del iphone
Botón UIActionSheet ¿Valores de índice defectuosos al usar más de 6 botones personalizados? (5)
He descubierto un problema extraño al usar UIActionSheet en el iPhone (iOS 4.2). Considere este código:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:viewController.view];
[self.window makeKeyAndVisible];
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"TestSheet"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles: nil];
[actionSheet addButtonWithTitle:@"one"];
[actionSheet addButtonWithTitle:@"two"];
[actionSheet addButtonWithTitle:@"three"];
[actionSheet addButtonWithTitle:@"four"];
[actionSheet addButtonWithTitle:@"five"];
[actionSheet addButtonWithTitle:@"six"];
//uncomment next line to see the problem in action
//[actionSheet addButtonWithTitle:@"seven"];
[actionSheet showInView:window];
[actionSheet release];
return YES;
}
- (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"buttonIndex: %d, cancelButtonIndex: %d, firstOtherButtonIndex: %d",
buttonIndex,
actionSheet.cancelButtonIndex,
actionSheet.firstOtherButtonIndex);
}
Si inicia esta aplicación, la hoja de acciones se comporta como se espera. Eso significa que el cancelButtonIndex siempre es 0, y los índices de los botones se informan correctamente. 1 para el botón "uno" y así sucesivamente. Si comenta en la línea para agregar el séptimo botón, la hoja de acciones produce una especie de vista de tabla, con el botón de cancelar en una línea adicional. Si presiono el botón "uno" en este caso, la variable buttonindex es 0, pero también lo es el cancelButtonIndex. Es imposible saber si el usuario ha pulsado el botón "cancelar" o el botón "uno". Eso no parece que debería ser así. ¿Alguien está en desacuerdo? Gracias por tu ayuda.
1) instanciar la vista de acción usando
[[UIActionSheet alloc] InitWithTitle: delegate: cancelButtonTitle: destructiveButtonTitle: OtherButtonTitles:]
sin el botón de cancelar o el botón destructivo (configúrelos en nulo)
2) Agregue todos los botones como de costumbre, usando [myActionSheet addButtonWithTitle:(NSString *)]
.
3) Si desea un botón especial, agréguelo usando el mismo método que en el paso 2, y configure el título a lo que sea ( @"Cancel"
, por ejemplo);
4) Ahora establezca la propiedad [myActionSheet setCancelButtonIndex:]
en el índice del último botón en la [myActionSheet setCancelButtonIndex:]
, que fue el botón de cancelación realizado. Haz lo mismo con un botón destructivo. (Estos son -1 por defecto, lo que hace que no se muestren)
Tenga en cuenta que un botón destructivo siempre aparecerá en la parte superior, y un botón de cancelación siempre aparecerá en la parte inferior, que no se puede cambiar.
Además, puede agregar el botón cancelar / destructivo en el índice 0 y luego agregar todos los demás botones. Sin embargo, ahora el primer índice de sus otros botones es 1, en lugar de cero. Esto puede ser confuso si tiene una matriz que se corresponde con los botones de alerta de alerta.
Acabo de tener este problema. Resuélvelo no configurando el botón de cancelar inicialmente. Puse los botones individualmente algo como esto:
for(int index = 0; index < buttonTotal; index++)
{
[actionSheet addButtonWithTitle:[NSString stringWithFormat:buttonText, [buttonItems objectAtIndex: index]]];
}
[actionSheet addButtonWithTitle:@"Cancel"];
actionSheet.cancelButtonIndex = actionSheet.numberOfButtons;
Creo que el índice cero es usado por el botón destructivo si lo usas para que los otros botones se incrementen desde allí, de lo contrario comenzarán desde 0.
No estoy seguro de estar de acuerdo con la opción de tabla, ya que, por encima de una cierta cantidad, los botones aparecen de forma predeterminada en una lista desplazable.
Haz lo siguiente:
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"TestSheet"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Delete"
otherButtonTitles: @"one", @"two", @"three", @"four", @"five", @"six", @"seven", @"eight", nil];
Significa que definen el botón destructiveButtonTitle
como destructiveButtonTitle
. EVITE usar el botón destructivo / cancelar en los otros otherButtonTitles
.
Me encontré con el mismo problema a pesar de que ya estaba incluyendo el botón Cancelar como último en la hoja de acción y estableciendo su índice en consecuencia. Mis problemas tenían que ver con el botón ''Destructivo''. Después de una investigación, aquí está mi opinión sobre el problema:
Después de agregar N botones a la hoja de acciones, cambia su diseño para colocar el botón Destructivo en la parte superior y el botón Cancelar en la parte inferior. En el medio hay una vista desplazable que incluye todos los otros botones. Otras fuentes indican que esta es una vista de tabla.
N es 7 para la orientación vertical y 5 para la orientación horizontal. N es 9 para la orientación vertical en una pantalla más grande de 4 ". Estos números son para todos los botones, incluyendo Cancelar y Destructivo. Para ser claros, N es el mayor número de botones antes del interruptor. vista desplazable.
No importa en qué lugar de la hoja de acción haya colocado originalmente los botones Cancelar y Destructivo dentro de la hoja de acción. Una vez que se ha alcanzado el límite, el botón Destructivo se mueve a la parte superior y la Cancelación se mueve a la parte inferior.
El problema es que los índices no se ajustan en consecuencia. Por lo tanto, si inicialmente no agregó el Cancelar como el último botón y el Destructivo como el primero, se informará el índice incorrecto en actionSheet: clickedButtonAtIndex: como se indicó en el informe inicial.
Por lo tanto, si va a tener más de N botones en su hoja de acción, DEBE agregar el botón Destructivo a la hoja de acción como el primer botón a la hoja de acción. DEBE agregar el botón Cancelar como el último botón agregado a la hoja de acción. Al construir inicialmente la hoja, deje ambas como nulas, como se describe en otra respuesta.
presentar un error sobre el problema. Incluya un pequeño proyecto de muestra y espere algunos meses para recibir una respuesta de ellos.
Por ahora puedes configurar tus botones de forma estática en el inicio.
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"TestSheet"
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles: @"one", @"two", @"three", @"four", @"five", @"six", @"seven", nil];
Funciona sin problemas.