Quería una versión de esto que funcionara para renunciar a cualquier vista, sin requerir salidas específicas para cada una. Aquí está mi solución, que puse en uno de mis puntos de vista estándar de contenedores ..
Se trata de utilizar MonoTouch C#, aunque debería ser obvio cómo convertir a Objective-C
private void findAndResignFirstResponder(UIView node=null) {
if (node == null) { return; }
if (node.IsFirstResponder) {
node.ResignFirstResponder();
return;
}
foreach (UIView view in node.Subviews) {
findAndResignFirstResponder(node:view);
}
}
private bool haveDrag = false;
public override void TouchesEnded(NSSet touches, UIEvent evt) {
if (!haveDrag) {
UITouch touch = (UITouch)evt.AllTouches.AnyObject;
if (!touch.View.CanBecomeFirstResponder) {
this.findAndResignFirstResponder(this);
Console.WriteLine("resign");
}
}
base.TouchesEnded (touches, evt);
}
public override void TouchesMoved(NSSet touches, UIEvent evt) {
haveDrag = true;
base.TouchesMoved (touches, evt);
}
public override void TouchesBegan(NSSet touches, UIEvent evt) {
haveDrag = false;
base.TouchesBegan (touches, evt);
}
¡Gran solución! – DeZigny
Estaré encantado de ayudar al infractor si esto no funciona para ellos ... simplemente deje un comentario o comience una nueva pregunta y conéctela aquí. – ohhorob
ohhorob, esta solución no funciona si hacemos clic en otra salida a la vista, ¿me pueden ayudar con eso? – TilalHusain