В моем приложении я хочу скрыть клавиатуру, когда я начинаю прокручивать UITableView. Я ищу об этом в Интернете, и большинство ответов - это подкласс UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
Я сделал подкласс, но это не работает.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
.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 {
...
Я использую этот класс, как это. Но функция делегирования myUITableViewTouchesBegan не работает во ViewController
.час
#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];
}
У меня есть некоторые проблемы с этой реализацией:
1) myUITableViewTouchesBegan не работает в ViewController
2) NSLog из MyUITableView.m - NSLog (@ "делегировать myUITableViewTouchesBegan"); работать только когда я касаюсь стола. Как это работает, когда я начинаю прокручивать?
Я пытаюсь переопределить scrollViewDidScroll, но компилятор сказал, что MyUITableVIew может не отвечать на эту строку [super scrollViewDidScroll: scrollView];
источник
Вы можете сделать это прямо в Интерфейсном Разработчике. Выберите свой
UITableView
и откройте инспектор атрибутов. В разделе «Вид прокрутки» установите для поля « Клавиатура» значение « Отклонить при перетаскивании» .источник
Просто чтобы добавить обновление к ответам выше. Ниже работал для меня в Swift 1.2
или
источник
С Swift 5
Чтобы скрыть клавиатуру при прокрутке TableView и остановить редактирование должным образом, нам все равно нужно объединить два типа ответов:
ViewDidLoad()
коде (как объяснил Пей ), например:UITableViewController
классисточник
Рабочее решение без написания одной строки кода в вашем контроллере:
Поскольку ваш вопрос заключается в обработке скрытой клавиатуры только с одним условием (при прокрутке). Но здесь я рекомендую одно решение для совместной работы текстового поля и клавиатуры, которое работает как очарование для UIViewController, UITableView и UIScrollView. Интересным фактом является то, что вам не нужно писать ни одной строки кода.
Вот и все: TPKeyboardAvoiding - отличное решение для работы с клавиатурой и прокруткой
источник
задача
Скрыть клавиатуру программно при прокрутке UITableView в Swift 3
подробности
xCode 8.2.1, swift 3
Решение
Полный образец
результат
источник
После iOS 7 вы можете просто использовать свойство tableview
Swift 3.0+
ObjectiveC
Для более ранних версий реализация делегата представления прокрутки могла бы работать.
источник