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
InformationsquelleAutor Charles | 2011-10-12
Schreibe einen Kommentar