Es posible en iOS 6 y versiones posteriores: debe implementar el método
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
En su controlador de vista. Haces tu validación allí, y si está bien, entonces return YES;
si no lo está return NO;
y no se llama a prepareForSegue.
Tenga en cuenta que este método no se llama automáticamente cuando se desencadena segues mediante programación. Si necesita realizar la verificación, debe llamar a shouldPerformSegueWithIdentifier para determinar si debe realizar una segue.
if ([self shouldPerformSegueWithIdentifier:@"segueIdentifier" sender:nil]) { [self performSegueWithIdentifier:@"segueIdentifier" sender:nil]; }
Nota: la respuesta aceptada es el mejor enfoque si puede apuntar a iOS 6. Para apuntar a iOS 5, esta respuesta servirá.
No creo que sea posible cancelar una sesión
prepareForSegue
. Sugeriría mover su lógica al punto de que elperformSegue
mensaje se envía primero.Si está utilizando Interface Builder para conectar un segue directamente a un control (por ejemplo, vincular un segue directamente a un
UIButton
), puede lograr esto con un poco de refactorización. Conecte el segue al controlador de vista en lugar de un control específico (elimine el enlace de segue anterior y luego arrastre el control desde el controlador de vista hasta el controlador de vista de destino). Luego cree unIBAction
en su controlador de vista y conecte el control al IBAction. Luego puede hacer su lógica (verifique el campo de texto vacío) en la IBAction que acaba de crear, y decidir allí si programar o noperformSegueWithIdentifier
.fuente
Swift 3 : func shouldPerformSegue (withIdentifier identifier: String, sender: Any?) -> Bool
Valor de retorno verdadero si se debe realizar la segue o falso si se debe ignorar.
Ejemplo :
fuente
Alternativamente, es un mal comportamiento ofrecer un botón que un usuario no debe presionar. Puede dejar el segue conectado como soportes, pero comience con el botón deshabilitado. Luego, conecte la "ediciónChanged" de UITextField a un evento en el control de vista ala
fuente
Es fácil en el rápido.
fuente
Como dijo Abraham, marque válido o no en la siguiente función.
Y, la
performSegueWithIdentifier:sender:
llamada por programación puede bloquearse sobrescribiendo el siguiente método. Por defecto, no está comprobando la validez o no-shouldPerformSegueWithIdentifier:sender:
, podemos hacerlo manualmente.fuente
[super performSegueWithIdentifier:identifier sender:sender];
realmente cierta?performSegueWithIdentifier:sender:
método y no llama a susuper
método.Debe realizar Segue para iniciar sesión Registrarse
fuente
Similar a la respuesta de Kaolin es dejar la secuencia conectada al control pero validar el control según las condiciones de la vista. Si está activando la interacción de la celda de la tabla, también debe establecer la propiedad userInteractionEnabled, así como deshabilitar las cosas en la celda.
Por ejemplo, tengo un formulario en una vista de tabla agrupada. Una de las celdas conduce a otra tableView que actúa como un selector. Cada vez que se cambia un control en la vista principal, llamo a este método
fuente
Respuesta rápida 4:
La siguiente es la implementación de Swift 4 para cancelar la segue:
fuente
La otra forma es anular el método de tableView con willSelectRowAt y devolver nil si no desea mostrar el segue.
showDetails()
- Es un bool. En la mayoría de los casos debe implementarse en el modelo de datos que se representa en la celda conindexPath
.fuente