En mi aplicación, quiero ocultar el teclado cuando empiezo a desplazar UITableView. Busco sobre esto en Internet, y la mayoría de las respuestas son subclases UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
Hice una subclase pero no funciona.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
archivo .m
#import "MyUITableView.h"
@implementation MyUITableView
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"delegate scrollView"); //this is dont'work
[super scrollViewDidScroll:scrollView];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"delegate myUITableViewTouchesBegan"); // work only here
[delegate myUITableViewTouchesBegan];
[super touchesBegan:touches withEvent:event];
}
- (void)dealloc {
...
Yo uso esta clase como esta. Pero la función delegar myUITableViewTouchesBegan no funciona en ViewController
.h
#import <UIKit/UIKit.h>
#import "MyUITableView.h"
@interface FirstViewController : UIViewController <UITableViewDelegate, UISearchBarDelegate, MyUITableViewDelegate> {
MyUITableView *myTableView;
UISearchBar *searchBar;
}
@property(nonatomic,retain) IBOutlet MyUITableView *myTableView;
...
.metro
- (void) myUITableViewTouchesBegan{
NSLog(@"myUITableViewTouchesBegan");
[searchBar resignFirstResponder];
}
Tengo algunos problemas con esta implementación:
1) myUITableViewTouchesBegan no funciona en ViewController
2) NSLog de MyUITableView.m - NSLog (@ "delegar myUITableViewTouchesBegan"); funciona solo cuando toco la mesa. ¿Cómo funciona también cuando empiezo a desplazarme?
Intento anular scrollViewDidScroll pero el comiler dijo que MyUITableVIew puede no responder en esta cadena [super scrollViewDidScroll: scrollView];
fuente
Puede hacerlo directamente en Interface Builder. Seleccione su
UITableView
y abra el Inspector de atributos. En la sección Vista de desplazamiento, configure el campo Teclado en Descartar al arrastrar .fuente
Solo para agregar una actualización a las respuestas anteriores. Lo siguiente funcionó para mí en Swift 1.2
o
fuente
Con Swift 5
Para ocultar el teclado al desplazarse por TableView y detener la edición correctamente, aún necesitamos combinar dos tipos de respuestas:
ViewDidLoad()
código (como explicó Pei ) por ejemplo:UITableViewController
clasefuente
Solución de trabajo sin escribir una sola línea de código en su controlador:
Como su pregunta es manejar el teclado oculto con una sola condición (en desplazamiento). Pero aquí estoy recomendando una solución para manejar el campo de texto y el teclado juntos que funciona de maravilla para UIViewController, UITableView y UIScrollView. El hecho interesante es que no necesita escribir una sola línea de código.
Aquí tienes: TPKeyboardAvoiding: una solución increíble para manejar el teclado y el desplazamiento
fuente
Tarea
Ocultar el teclado mediante programación cuando se desplaza UITableView en Swift 3
Detalles
xCode 8.2.1, swift 3
Solución
Muestra completa
Resultado
fuente
Después de iOS 7, puedes usar la propiedad tableview
Swift 3.0+
C objetivo
Para versiones anteriores, la implementación del delegado de vista de desplazamiento podría funcionar.
fuente