In meiner App möchte ich die Tastatur ausblenden, wenn ich mit dem Scrollen von UITableView beginne. Ich suche darüber im Internet und die meisten Antworten sind UITableView (http://stackoverflow.com/questions/3499810/tapping-a-uiscrollview-to-hide-the-keyboard).
Ich habe Unterklasse gemacht, aber es funktioniert nicht.
#import <UIKit/UIKit.h>
@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end
@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
id<MyUITableViewDelegate> delegate;
}
@end
.m Datei
#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 {
...
Ich benutze diese Klasse so. Die Delegatenfunktion myUITableViewTouchesBegan funktioniert jedoch nicht in 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];
}
Ich habe einige Probleme mit dieser Implementierung:
1) myUITableViewTouchesBegan funktioniert nicht in ViewController
2) NSLog von MyUITableView.m - NSLog (@ "delegate myUITableViewTouchesBegan"); Arbeite nur, wenn ich den Tisch berühre. Wie hat es funktioniert, auch wenn ich anfange zu scrollen?
Ich versuche, scrollViewDidScroll zu überschreiben, aber der Comiler hat gesagt, dass MyUITableVIew möglicherweise nicht auf diese Zeichenfolge reagiert [super scrollViewDidScroll: scrollView];
quelle
Sie können dies direkt im Interface Builder tun. Wählen Sie Ihre aus
UITableView
und öffnen Sie den Attributinspektor. Stellen Sie im Abschnitt Bildlaufansicht die Tastatur ein Tastaturfeld auf Drag zu Entlassen .quelle
Nur um den obigen Antworten ein Update hinzuzufügen. Das Folgende hat in Swift 1.2 für mich funktioniert
oder
quelle
Mit Swift 5
Um die Tastatur beim Scrollen in der Tabellenansicht auszublenden und die Bearbeitung zu beenden, müssen noch zwei Arten von Antworten kombiniert werden:
ViewDidLoad()
Code (wie Pei erklärt hat) ein, zum Beispiel:UITableViewController
Klasse nur Folgendes hinzufügenquelle
Arbeitslösung ohne Schreiben einer einzelnen Codezeile in Ihren Controller:
Da Ihre Frage ist, die Tastatur zum Ausblenden nur mit einer Bedingung zu behandeln (beim Scrollen). Aber hier empfehle ich eine Lösung, um Textfeld und Tastatur zusammen zu handhaben, die für UIViewController, UITableView und UIScrollView wie ein Zauber wirkt. Die interessante Tatsache ist, dass Sie keine einzige Codezeile schreiben müssen.
Los geht's: TPKeyboardAvoiding - Eine großartige Lösung für Tastatur und Bildlauf
quelle
Aufgabe
Blenden Sie die Tastatur programmgesteuert aus, wenn Sie in Swift 3 durch UITableView scrollen
Einzelheiten
xCode 8.2.1, schnell 3
Lösung
Vollständige Probe
Ergebnis
quelle
Nach iOS 7 können Sie einfach die tableview-Eigenschaft verwenden
Swift 3.0+
Ziel c
In früheren Versionen könnte die Implementierung des Bildlaufansichtsdelegaten funktionieren.
quelle