Dans mon application, je veux masquer le clavier lorsque je commence à faire défiler UITableView. Je recherche à ce sujet sur Internet, et la plupart des réponses sont sous-classées UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
J'ai créé une sous-classe mais cela ne fonctionne pas.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
fichier .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 {
...
J'utilise cette classe comme ça. Mais la fonction déléguée myUITableViewTouchesBegan ne fonctionne pas dans 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;
...
.m
- (void) myUITableViewTouchesBegan{
NSLog(@"myUITableViewTouchesBegan");
[searchBar resignFirstResponder];
}
J'ai quelques problèmes avec cette implémentation:
1) myUITableViewTouchesBegan ne fonctionne pas dans ViewController
2) NSLog de MyUITableView.m - NSLog (@ "delegate myUITableViewTouchesBegan"); ne fonctionne que lorsque je touche la table. Comment ça marche aussi quand je commence à faire défiler?
J'essaye de remplacer scrollViewDidScroll mais le comilateur a dit que MyUITableVIew peut être ne pas répondre sur cette chaîne [super scrollViewDidScroll: scrollView];
la source
Vous pouvez le faire directement dans Interface Builder. Sélectionnez votre
UITableView
et ouvrez l'inspecteur d'attributs. Dans la section Affichage de défilement, définissez le champ Clavier sur Ignorer lors du glissement .la source
Juste pour ajouter une mise à jour aux réponses ci-dessus. Le ci-dessous a fonctionné pour moi dans Swift 1.2
ou
la source
Avec Swift 5
Pour masquer le clavier lors du défilement de TableView et arrêter correctement l'édition, nous devons encore combiner deux types de réponses:
ViewDidLoad()
code (comme Pei l'a expliqué) par exemple:UITableViewController
classela source
Solution de travail sans écrire une seule ligne de code dans votre contrôleur:
Comme votre question est de gérer le clavier de masquage avec une seule condition (sur le défilement). Mais ici, je recommande une solution pour gérer le champ de texte et le clavier ensemble qui fonctionne comme du charme pour UIViewController, UITableView et UIScrollView. Le fait intéressant est que vous n'avez pas besoin d'écrire une seule ligne de code.
Ici vous allez: TPKeyboardAvoiding - Une solution géniale pour gérer le clavier et le défilement
la source
Tâche
Masquer le clavier par programme lors du défilement de UITableView dans Swift 3
Détails
xCode 8.2.1, swift 3
Solution
Échantillon complet
Résultat
la source
Après iOS 7, vous pouvez simplement utiliser la propriété tableview
Swift 3.0+
Objectif c
Pour les versions antérieures, l'implémentation du délégué de vue de défilement pouvait fonctionner.
la source