W mojej aplikacji chcę ukryć klawiaturę, gdy zaczynam przewijać UITableView. Szukam tego w Internecie, a większość odpowiedzi to podklasa UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
Zrobiłem podklasę, ale to nie działa.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
plik .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 {
...
Używam tej klasy w ten sposób. Ale funkcja delegata myUITableViewTouchesBegan nie działa w 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];
}
Mam pewne problemy z tą implementacją:
1) myUITableViewTouchesBegan nie działa w ViewController
2) NSLog z MyUITableView.m - NSLog (@ "delegate myUITableViewTouchesBegan"); działa tylko wtedy, gdy dotykam stołu. Jak to działa, kiedy zaczynam przewijać?
Próbuję zastąpić scrollViewDidScroll, ale kompilator powiedział, że MyUITableVIew może nie odpowiadać na ten ciąg [super scrollViewDidScroll: scrollView];
źródło
Możesz to zrobić bezpośrednio w programie Interface Builder. Wybierz swój
UITableView
i otwórz Inspektor atrybutów. W sekcji Widok przewijania ustaw pole Klawiatura na Zwolnij po przeciągnięciu .źródło
Wystarczy dodać aktualizację do powyższych odpowiedzi. Poniższe działało dla mnie w Swift 1.2
lub
źródło
Dzięki Swift 5
Aby ukryć klawiaturę podczas przewijania TableView i przestać poprawnie edytować, nadal musimy połączyć dwa typy odpowiedzi:
ViewDidLoad()
kodzie (jak wyjaśnił Pei ) na przykład:UITableViewController
klasyźródło
Działające rozwiązanie bez pisania jednej linii kodu w kontrolerze:
Twoje pytanie dotyczy obsługi ukrywania klawiatury tylko z jednym warunkiem (przy przewijaniu). Ale tutaj polecam jedno rozwiązanie do obsługi pola tekstowego i klawiatury razem, które działa jak urok dla UIViewController, UITableView i UIScrollView. Ciekawostką jest to, że nie musisz pisać ani jednej linii kodu.
Proszę bardzo: TPKeyboardAvoiding - niesamowite rozwiązanie do obsługi klawiatury i przewijania
źródło
Zadanie
Ukryj klawiaturę programowo podczas przewijania UITableView w Swift 3
Detale
xCode 8.2.1, swift 3
Rozwiązanie
Pełna próbka
Wynik
źródło
Po iOS 7 możesz w prosty sposób używać właściwości tableview
Swift 3.0+
Cel C
W przypadku wcześniejszych wersji implementacja delegata widoku przewijania może działać.
źródło