2013-08-22 11 views
5

C'è un modo per regolare la posizione di un rightView su UITextField? Ho provato ad impostare la cornice sulla vista (impostata come rightView) ma non ha cambiato nulla.Posizione di rightView UITextField

Vorrei evitare di creare due viste, una come destra e una come sottoscheda di destra, dove cambio la posizione della vista secondaria, se possibile.

+0

Hai provato '[textField.rightView setFrame: someFrame];'? O forse 'setBounds:'. – Sti

+0

È necessario prendere 2 visualizzazioni per quello. –

risposta

21

La vista sovrapposizione destra si trova nel rettangolo restituito dal rightViewRectForBounds: metodo del ricevitore.

Quindi vi consiglio di sottoclasse UITextField e ignorare questo metodo, qualcosa di simile:

@interface CustomTextField: UITextField 

@end 

@implementation CustomTextField 

// override rightViewRectForBounds method: 
- (CGRect)rightViewRectForBounds:(CGRect)bounds{ 
    CGRect rightBounds = CGRectMake(bounds.origin.x + 10, 0, 30, 44); 
    return rightBounds ; 
} 
+2

Fresco. Comunque ho trovato per il callout della vista giusta, mi è stato meglio usare bounds.size.width - 30 i.e CGRect rightBounds = CGRectMake (bounds.size.width - 30, 0, 30, 50); in questo modo ottiene la larghezza del campo di testo e meno quella cifra per ottenere il riempimento per la vista corretta –

-1

Swift immagine aggiuntivo in Textfield Lato destro Per

 textField.rightView = UIImageView(image: "small-calendar")) 
     textField.rightView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20) 
     textField.rightViewMode = .always 
-1

risposta di @Puneet Sharma è stato grande, ma che darebbe la necessità di creare una classe che sarebbe sottoclasse UITextField, quello che ho fatto invece è stato creare un UIView che avrebbe funzionato come un padding.

mio codice funziona senza la necessità di creare una sottoclasse

Ecco il mio codice, anche se è scritto in Swift 3

// this is the view I want to see on the rightView 
let checkImageView = UIImageView(image: UIImage(named: "check24.png")) 
checkImageView.frame = CGRect(x: 0, y: 0, width: 24, height: 24) 
checkImageView.curveEdges(12) 
checkImageView.contentMode = .scaleAspectFit 

// declare how much padding I want to have 
let padding: CGFloat = 6 

// create the view that would act as the padding 
let rightView = UIView(frame: CGRect(
    x: 0, y: 0, // keep this as 0, 0 
    width: checkImageView.frame.width + padding, // add the padding 
    height: checkImageView.frame.height)) 
rightView.addSubview(checkImageView) 

// set the rightView UIView as the textField's rightView 
self.textField.rightViewMode = .whileEditing 
self.textField.rightView = rightView 

Che cosa è successo qui è, che la rightView che è un UIView che ha uno sfondo colorato trasparente che poi ha dato l'illusione che ci sia un padding mentre non lo è.