No meu aplicativo, quero ocultar o teclado quando começar a rolar o UITableView. Eu pesquiso sobre isso na internet, e a maioria das respostas está subclassificando o UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
Eu fiz subclasse, mas não funciona.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
arquivo .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 {
...
Eu uso essa classe assim. Mas a função delegada myUITableViewTouchesBegan não funciona no 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];
}
Eu tenho alguns problemas com essa implementação:
1) myUITableViewTouchesBegan não funciona no ViewController
2) NSLog de MyUITableView.m - NSLog (@ "delegar myUITableViewTouchesBegan"); só trabalho quando toco na mesa. Como funcionou também quando começo a rolar?
Eu tento substituir scrollViewDidScroll, mas o compilador disse que MyUITableVIew pode não responder nesta string [super scrollViewDidScroll: scrollView];
fonte
Você pode fazer isso corretamente no Interface Builder. Selecione o seu
UITableView
e abra o Inspetor de atributos. Na seção Visualização de rolagem, defina o campo Teclado como Dispensar ao arrastar .fonte
Apenas para adicionar uma atualização às respostas acima. O abaixo funcionou para mim no Swift 1.2
ou
fonte
Com o Swift 5
Para ocultar o teclado ao rolar o TableView e parar a edição corretamente, ainda precisamos combinar dois tipos de respostas:
ViewDidLoad()
código (como Pei explicou), por exemplo:UITableViewController
classefonte
Solução de trabalho sem escrever uma única linha de código no seu Controller:
Como sua pergunta é manipular o teclado oculto com apenas uma condição (na rolagem). Mas aqui estou recomendando uma solução para lidar com o campo de texto e o teclado juntos, que funciona como charme para UIViewController, UITableView e UIScrollView. O fato interessante é que você não precisa escrever nenhuma linha de código.
Aqui está: TPKeyboardAvoiding - Uma solução incrível para lidar com teclado e rolagem
fonte
Tarefa
Oculte o teclado programaticamente ao rolar UITableView no Swift 3
Detalhes
xCode 8.2.1, rápido 3
Solução
Amostra Completa
Resultado
fonte
Após o iOS 7, você pode simplesmente usar a propriedade tableview
Swift 3.0+
ObjectiveC
Para versões anteriores, a implementação do delegado de exibição de rolagem poderia funcionar.
fonte