objective - iOS 8: UIAlertView/UIAlertController no muestra texto o botones
uialertcontroller styles (8)
Verifica si la clase está disponible
if ([UIAlertController class])
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert title" message:@"Alert message" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:ok];
[self presentViewController:alertController animated:YES completion:nil];
}
else
{
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Alert title" message:@"Alert message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
Tengo un UIAlertView que se muestra perfectamente en iOS 7 pero en iOS 8, no muestra botones ni etiquetas. La alerta sigue siendo visible, pero solo una pequeña caja blanca. Los botones Aceptar y Cancelar toman sus eventos también pero no hay textos visibles.
He usado esta alerta para mostrar al hacer clic en un botón
- (IBAction)sel_btnLogout:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Logout!" message:@"Are you sure you want to logout?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
}
Revisé el marco en iOS 8: está dando (0,0,0,0) pero en iOS 7 está dando un valor definido.
También verifiqué la iteración en las subvistas de uialertview. En iOS7, va en el bucle, ya que encuentra subvistas de alerta. En iOS8, dice que no hay subvistas de alertView.
en iOS 8 necesita reemplazar UIAletrview
y UIActionSheet
con UIAlertcontroller
. Lees primero Esta documentación en el foro de Apple
Apple Alertcontroller
Obtuve la respuesta a mi problema. El problema era que estaba usando la categoría UIFont + Replacement en mi proyecto. Esto funcionaba bien en iOS 7 pero en iOS 8 usaba pocos métodos obsoletos. Debido a esto, no sé por qué, pero solo mi vista de alerta no mostraba ninguna etiqueta.
Solución: eliminó la categoría del proyecto y estableció la fuente a través de xib. Una vez que colocamos el archivo .tff de cualquier fuente en el espacio de trabajo de nuestro proyecto, vemos esos nombres de fuente en el xib en fuentes personalizadas. NO NECESITA UTILIZAR UIFont + categoría de reemplazo.
Con iOS 8 puedes establecer el título en lugar del mensaje:
[[[UIAlertView alloc] initWithTitle:@"AlertView in iOS 8." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];
UIAlertView está en desuso de iOS 8 para obtener más información visite este
http://nshipster.com/uialertcontroller/ . https://developer.apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UIAlertViewDelegate_Protocol/index.html
Entonces, si vas a escribir un código separado para iOS 7 e iOS 8, deberías usar UIAlertController en su lugar:
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"AlertView in iOS 8" message:nil preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[self dismissViewControllerAnimated:YES completion:nil];
}]];
[self presentViewController:alertController animated:YES completion:nil];
Puedes verificar ese código
if (([[[UIDevice currentDevice] systemVersion] compare:@"8.0" options:NSNumericSearch] == NSOrderedAscending))
{
// use UIAlertView
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:Title message:desc delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
else {
// use UIAlertController
UIAlertController *alert = [UIAlertController alertControllerWithTitle:Title message:desc preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
}
Lea el siguiente código para comprender cómo agregar los campos y botones a las alertas.
- (IBAction)UIAlertControllerWithActionSheetTextFields:(id)sender {
UIAlertController * alert= [UIAlertController
alertControllerWithTitle:@"Info"
message:@"You are using UIAlertController with Actionsheet and text fields"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction
actionWithTitle:@"OK"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
NSLog(@"Resolving UIAlert Action for tapping OK Button");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction* cancel = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
NSLog(@"Resolving UIAlertActionController for tapping cancel button");
[alert dismissViewControllerAnimated:YES completion:nil];
}];
[alert addAction:ok];
[alert addAction:cancel];
[alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
textField.accessibilityIdentifier = @"usernameTextField";
textField.placeholder = @"Enter your username";
textField.accessibilityLabel = @"usernameLabel";
}];
[alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
textField.placeholder = @"Enter your password";
textField.accessibilityIdentifier = @"paswordTextField";
textField.accessibilityLabel = @"passwordLabel";
}];
[self presentViewController:alert animated:YES completion:nil];
}
y si necesita un proyecto para referir completamente los tipos de alertas que están disponibles en IOS, siga mi proyecto desde la siguiente URL:
let alert = UIAlertController(title: "Warning" as String , message: messageString as String, preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
{
UIAlertAction in
self.dismissViewControllerAnimated(true, completion: nil)
}
// Add the actions
alert.addAction(okAction)
self.presentViewController(alert, animated: true, completion: nil)
Creo que esto no es problemas de vista de UIAlertview
. por favor revisa bien este trabajo ...
Creo que tu código emite ...........
en cualquier view controller
pone este código en viewDidLoad
como a continuación:
- (void)viewDidLoad
{
[super viewDidLoad];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"My message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
[alert show];
}