Sto tentando di utilizzare textFieldShouldBeginEditing
per disattivare la tastiera da mostrare per un UITextField
personalizzato. Sto implementando tutti i metodi UITextFieldDelegate
. Tuttavia, per qualche motivo, textFieldShouldBeginEditing
non viene mai chiamato.textFieldShouldBeginEditing non viene chiamato
I seguenti metodi delegato sempre arrivare chiamati:
– textFieldDidBeginEditing:
– textFieldShouldEndEditing:
– textFieldDidEndEditing:
La vista è strutturato nel modo seguente:
UIViewController
che detiene una ScrollView. A seconda dello stato della vista, questo ScrollView conterrà un UIView
con un elenco personalizzato UITextFields
.
Sto utilizzando iOS 4.3.5 (8L1) su questo dispositivo.
Qualche idea?
Modifica; aggiunti alcuni frammenti di codice:
UIViewController
ha la seguente interfaccia
@interface AViewController: UIViewController<UITextFieldDelegate>
Una volta caricato l'UIViewController, mi collego tutte UITextFields alla vista utilizzando
aSubView.aTextField.delegate = self;
(semplificato) implementazioni delegato situati 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;
}
Personalizzato UITextField
codice
semplificato file di implementazione -
#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
Se gli altri metodi delegato vengono chiamati per lo stesso campo di testo, e le tue textfields non sono sottoclassi o qualsiasi cosa, questo può essere solo un errore di battitura nel nome del metodo. – jrturton
Ho sottoclasse UITextField per apportare alcune modifiche all'aspetto del campo di testo. Tuttavia, non ho effettivamente toccato nulla relativo ai delegati. – Charles
Non ne sono sicuro, ma è possibile che "textFieldShouldBeginEditing" venga chiamato dall'implementazione predefinita del metodo "canBecomeFirstResponder"? Prova a implementare il metodo con [super canBecomeFirstResponder] o semplicemente rimuovendolo. – lluismontero