2009-12-08 4 views
5

Sto provando a utilizzare uno sfondo personalizzato del campo di testo. Il problema è che il testo sembra essere troppo vicino a sinistra.UITextField visualizzazione sfondo personalizzata e spostamento del testo

Non vedo alcun modo per spostare il testo senza sottoclasse UITextField. Quindi sto tentando di estendere e sovrascrivere

- (void)drawTextInRect:(CGRect)rect{ 
    NSLog(@"draw rect"); 
    CGRect newRect = CGRectMake(rect.origin.x+20,rect.origin.y,rect.size.width-20,rect.size.height);  
    [super drawTextInRect:newRect]; 
} 

Ma per qualche motivo il registro non stampa mai. So che la sottoclasse è in uso poiché anch'io ho un log in init, e questo funziona bene.

Whast goig on

MODIFICA.

Cerco anche

- (CGRect)textRectForBounds:(CGRect)bounds{ 
    NSLog(@"bounds"); 
    CGRect b = [super textRectForBounds:bounds]; 
    b.origin.x += 20; 
    return b; 
} 

che ripercorre in realtà, ma non sembra essere lo spostamento

risposta

14

Penso che si potrebbe utilizzare la proprietà leftView per questo.

È possibile aggiungere uno leftView e rightView a un UITextfield. Queste visualizzazioni possono essere utilizzate per visualizzare un'icona, ma se si tratta di una vista vuota occuperà solo spazio, che è ciò che desideri.

CGFloat leftInset = 5.0f; 
UIView *leftView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, leftInset, self.bounds.size.height)]; 
self.leftView = leftView; 
self.leftViewMode = UITextFieldViewModeAlways; 
[leftView release]; 
+1

che non risolve il motivo per cui quello che stavo facendo non funzionava, ma sicuramente risolve il mio problema. Grazie! In realtà ho provato lo stesso, ma ho lasciato out viewModeAlways, quindi non ha funzionato. – dizy

5

Cordiali saluti, ma ho avuto lo stesso problema e finalmente capito che c'è anche un editingRectForBounds: metodo. Il controllo usa quello quando stai inizialmente scrivendo cose sul campo. Se ha un valore e non è più in modalità di modifica, utilizza textRectForBounds: per decidere dove disegnare il testo.

+0

che ha funzionato bene per me, grazie per il chiarimento. – FelixLam

5

non ho provato il metodo di Thomas, ma solo per chiarire la risposta di Sean, questo ha funzionato per me:

MyInsetUITextField.m

#import "MyInsetUITextField.h" 
@implementation MyInsetUITextField 

- (CGRect)textRectForBounds:(CGRect)bounds { 

    return CGRectInset(bounds, 10, 0); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 10, 0); 
} 

@end 

MyInsetUITextField.h

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@interface MyInsetUITextField : UITextField { 

} 

@end 

Grazie.

+0

potresti dirmi come aggiungere un'immagine di sfondo alla sottoclasse UITextField? –

+1

Questa è una soluzione migliore rispetto a quella di Thomas 'e penso che dovrebbe essere contrassegnata come la risposta corretta. – eladleb

7

Un'altra soultion:

Nel file appDelegate.m scrivere il seguente codice nella parte superiore

@interface UITextField (myCustomTextField) 

@end 

@implementation UITextField (myCustomTextField) 

- (CGRect)textRectForBounds:(CGRect)bounds { 

    return CGRectInset(bounds, 10, 0); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 10, 0); 
} 

@end 
+0

Grazie. Questo è perfetto. – rydgaze

-1

Solo un testa a testa, c'è un LAZY EASY WAY per quelli di noi che utilizzano il Xcode interface builder:

  • più semplice: mettere un UIImageView dietro un campo di testo

  • più semplice: cambia lo stile del bordo di UITextView in qualsiasi stile tranne il "cerchio grafico" all'estrema destra, quindi aggiungi un'immagine come sfondo. L'immagine ha la precedenza sul grafico, ma si ottiene comunque il padding necessario per uno sfondo normale dell'immagine.

Problemi correlati