143 votes

Masquer le clavier lorsque scroll 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 de la 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 {
...

J'utilise 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"); travailler seulement quand 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];

460voto

Pei Points 1497

Voici le moyen le plus propre d’y parvenir dans iOS 7.0.

 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
 

Ou rejeter quand toucher

 tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;
 

149voto

Anna Points 44332

Vous ne savez pas pourquoi vous devez sous-classer UITableView pour cela.

Dans le contrôleur de vue contenant la simple UITableView, essayez d'ajouter ceci:

 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [searchBar resignFirstResponder];
}
 

135voto

Kyle Clegg Points 8441

Vous pouvez le faire correctement dans Interface Builder. Sélectionnez votre UITableView et ouvrez l'inspecteur d'attributs. Dans la section Vue de défilement, définissez le champ Clavier sur Dismiss on Drag .

entrez la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X