Cacher le clavier lorsque défilement UITableView
Dans mon application je veux cacher le clavier quand je commence à défiler UITableView. Je recherche à ce sujet dans internet, et plus la réponse est sous-classement UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
J'ai fait sous-classe, mais il ne faut pas travailler.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
.m fichier
#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 {
...
- Je utiliser cette classe comme ça. Mais la fonction de délégué myUITableViewTouchesBegan ne fonctionnent pas dans le 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 mise en oeuvre:
1) myUITableViewTouchesBegan ne fonctionnent pas dans le ViewController
2) NSLog de MyUITableView.m - NSLog(@"délégué myUITableViewTouchesBegan"); ne fonctionnent que lorsque je touche la table. Comment fait c'est du travail aussi quand je commence à défiler?
J'ai essayer de remplacer scrollViewDidScroll mais comiler dit que MyUITableVIew peut-être de ne pas répondre sur cette chaîne [super scrollViewDidScroll:le scrollView];
Vous devez vous connecter pour publier un commentaire.
Ne savez pas pourquoi vous avez besoin de sous-classe UITableView pour cela.
Dans la vue contrôleur qui contient la plaine UITableView, essayez d'ajouter ceci:
Ici est la façon la plus propre à atteindre dans iOS 7.0 et supérieur:
Ou de rejeter de manière interactive lors de la toucher:
Ou Swift:
À rejeter de manière interactive:
Vous pouvez faire de ce droit dans Interface Builder. Sélectionnez votre
UITableView
et ouvrir les Attributs de l'Inspecteur. Dans le Défilement de l'Affichage de la section configuration de la Clavier champ de Rejeter sur un Glisser.Il suffit d'ajouter une mise à jour pour les réponses ci-dessus. Ci-dessous travaillé pour moi dans Swift 1.2
ou
Solution de travail sans avoir à écrire une seule ligne de code dans votre Contrôleur:
Comme votre question est de gérer la cacher le clavier avec une seule condition (sur parchemin).
Mais ici, je suis de recommander une solution pour gérer la textfield et le clavier ensemble qui fonctionne comme un 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 super solution pour gérer le clavier et faites défiler
Tâche
Cacher le clavier par programme lorsque défilement UITableView dans Swift 3
Détails
xCode 8.2.1, swift 3
Solution
Totalité De L'Échantillon
Résultat
Après iOS 7, vous pouvez simplement utiliser la tableview propriété
Swift 3.0+
ObjectiveC
Pour les versions antérieures, la mise en œuvre de défilement de la vue délégué de travail.
Avec Swift 5
Pour masquer le clavier lors du défilement de la TableView et arrêter la modification correctement, nous avons encore besoin de combiner deux types de réponses:
ViewDidLoad()
code (comme Pei expliqué) par exemple:UITableViewController
classe