Yo soy el mantenimiento de un viejo iOS proyecto basado en el SDK 6.0.
Un método de este proyecto llamado
-(void) showComboBox:(UIView*)view:withOptions:(NSDictionary*)options
se utiliza para mostrar un cuadro combinado. Para lograr el objetivo, se utiliza UIActionSheet, que es obsoleto en iOS8.
Mi solución es la siguiente:
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber10_8) {
UIAlertController* alertController = [UIAlertController
alertControllerWithTitle:@"title"
message:@"message"
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction* item = [UIAlertAction actionWithTitle:@"item"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
//do something here
//inform the selection to the WebView
...
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction* cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
[alertController dismissViewControllerAnimated:YES completion:nil];
}];
[alertController addAction:item];
[alertController addAction:cancelAction];
//I am not sure whether it's the right way
if ([view.nextResponder isKindOfClass:UIViewController.class]) {
UIViewController* vc = (UIViewController*)view.nextResponder;
[vc presentViewController:alertController animated:YES completion:nil];
}
Es que una solución adecuada?
Esto es lo que más me preocupación acerca de: UIAlertController necesita ser añadido a un UIViewController pero que sólo se puede obtener el puntero de la UIView, así que he usado la vista.nextResponder para conseguir lo que quiero, pero es que de una buena manera?
He utilizado siguiente código para mostrar la acción de la hoja utilizando
UIAlertViewController
y funciona perfecto.Swift
Objetivo C
Edición:
Usted necesita para obtener
UIViewController
objeto aquí. Puede establecer variable global o llamar a un método de delegado, o puede utilizar la notificación para obtener controlador de vista de objeto en este código.y última línea de código anterior será igual.
self.viewController
es una variable global que se establecerá antes de obtener este punto de vista.Debido a que el enfoque está siguiendo ahora el uso de
view.nextResponder
. Me temo que puede que no funcione.view
en el código? Es una subvista de cualquier controlador de vista?view.nextResponder
sería una mala idea? He tenido un par de pruebas y parece funcionar bien.UIAlertController
está disponible para iOS 8.0 – Y Explicar cómo se produce un error? ¿Cuál es el punto?He usado la hoja de acción para cambiar la foto de perfil. He seguido Kampai enfoque, acaba de quitar dismissviewController llamada, ya que estaba comenzando a mí de una vista al pulsar Cancelar o selección de fotos de la vista
Swift actualización –
Swift 4
Puede utilizar
view.window.rootViewController
lugar. Si usted no se preocupan por el presentador está bien.Si bien puede parecer muy simple, hay un desagradable problema con el uso de
UIAlertController
. Es propensos a las fugas de memoria. Con el fin de probar si usted tiene el problema, sólo hay que poner un punto de interrupción en la vista del controlador dedealloc
método y ver si se cancela la asignación correctamente.Yo estaba buscando una solución para bastante tiempo, y he aquí cómo utilizar una alerta controlador en mi app.
Esto no es todo. Aquí está un ejemplo de cómo utilizarlo en su controlador de vista. En mi caso su
tableview
con la búsqueda, por lo que la presentación de controlador puede ser diferente.