textFieldShouldBeginEditing nicht genannt
Ich versuche, mit textFieldShouldBeginEditing
zu deaktivieren, die Tastatur zu zeigen, bis für eine benutzerdefinierte UITextField
. Ich bin der Umsetzung aller UITextFieldDelegate
Methoden. Jedoch für einige Grund textFieldShouldBeginEditing
eigentlich nie aufgerufen wird.
Folgende delegate-Methode IMMER aufgerufen:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
Ansicht ist in der folgenden Weise gegliedert:
UIViewController
hält eine scrollview. Je nach Zustand der Ansicht, diese ScrollView enthält eine UIView
mit einer Liste von benutzerdefinierten UITextFields
.
Ich bin mit iOS 4.3.5 (8L1) auf diesem Gerät.
Irgendwelche Ideen?
Bearbeiten; Hinzugefügt einige code-snippets:
UIViewController
hat die folgende Schnittstelle
@interface AViewController: UIViewController<UITextFieldDelegate>
Einmal die UIViewController geladen, Verbinde ich alle UITextFields, um die Ansicht mit
aSubView.aTextField.delegate = self;
(Vereinfacht) delegieren Implementierungen befindet sich in AViewController
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
return YES;
}
Benutzerdefinierte UITextField
code
Vereinfachte Implementierung-Datei --
#import "PVEntryTextField.h"
#import "EntryViewController.h"
@implementation PVEntryTextField
@synthesize isPasswordField, state, singleTap;
- (id)initWithCoder:(NSCoder *)inCoder
{
if (self = [super initWithCoder:inCoder])
{
self.font = [UIFont fontWithName:@"Helvetica-Bold" size:19];
self.textColor = [UIColor colorWithRed:51.0/255.0
green:51.0/255.0
blue:51.0/255.0
alpha:1.0];
self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
}
return self;
}
- (CGRect)textRectForBounds:(CGRect)bounds
{
return CGRectMake(bounds.origin.x + 16, bounds.origin.y,
bounds.size.width - 16*2 - 10, bounds.size.height);
}
- (CGRect) editingRectForBounds:(CGRect)bounds
{
return [self textRectForBounds:bounds];
}
- (BOOL) canBecomeFirstResponder
{
return YES;
}
- (void) updateState:(int) newState
{
state = newState;
}
- (void)dealloc
{
[super dealloc];
}
@end
- Wenn Ihr anderen delegate-Methoden aufgerufen werden für die gleichen textfield, und Ihre Felder mit Sternchen sind nicht Unterklassen oder nichts, das kann nur von einem Tippfehler in der Methode name.
- Ich habe Unterklassen UITextField einige änderungen vornehmen, um das Aussehen und das Gefühl des textfield. Allerdings habe ich nicht wirklich berührt alles, was mit den Delegierten.
- Ich bin nicht sicher aber, ist es posible, dass "textFieldShouldBeginEditing" aufgerufen wird, die default-Implementierung der Methode "canBecomeFirstResponder"? Versuchen Sie die Umsetzung der Methode durch [super canBecomeFirstResponder] oder einfach nur, es zu entfernen.
- Sie waren korrekt. Es funktioniert jetzt! Danke! Schreib das als Antwort und ich werde es akzeptieren. 🙂
- Erledigt, danke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es posible, dass
textFieldShouldBeginEditing
aufgerufen wird, die default-Implementierung der MethodecanBecomeFirstResponder
?Versuchen, die Umsetzung der Methode durch die
[super canBecomeFirstResponder]
oder einfach nur, es zu entfernen.UITextField
Unterklasse überschreibtcanBecomeFirstResponder
durch einige empirische Tests. Total verpasst.Haben Sie die UITextField-Delegierter "selbst"?
Für jeden, der hier her kommt und nicht das finden einer Lösung. Mein problem war, dass ich das textField in IB und dann alloc in meiner viewDidLoad. Wenn ich entfernt die Instanzierung des delegate korrekt funktionierte, wie es gebunden war an die richtige TF.
Ich lief auch das Problem, dass Sie nicht mit textFieldShouldEndEditing oder textFieldShouldReturn genannt. Dies geschah nach dem Update, meine app ' s Storyboard.
Die delegate-Methoden wurden immer aufgerufen, wenn die UITextFields wo ein Teil der ViewController Unterklasse.
Aber, wenn Sie verschoben wurden in einem Scroll-Ansicht in der ViewController, waren die Methoden nicht mehr aufgerufen.
Einstellung Ihrer app die Delegierten selbst in ViewDidLoad behoben dieses problem.
Weiß nicht, ob einen Tippfehler, Fehler beim kopieren den code hier ein, aber der name der Methode ist falsch:
RICHTIGE - textFieldShouldBeginEditing
DIR textFieldShoulBeginEditing (fehlende "d")
Swift-3 folgende Methode erforderlich "_" bevor textField, so dass dieser Delegat-Methode aufrufen. In meinem Fall hilft es mir.