2013-08-22 13 views
5

Czy istnieje sposób dostosowania pozycji rightView na UITextField? Próbowałem ustawić ramkę na widoku (ustawione jako rightView), ale nic nie zmieniło.Pozycja rightView UITextField

Chciałbym uniknąć tworzenia dwóch widoków, jeden jako prawy widok, a drugi jako widok prawego podglądu, w którym zmienię pozycję wydziału, jeśli to możliwe.

+0

Próbowałeś '[textField.rightView setFrame: someFrame];'? A może 'setBounds:'. – Sti

+0

Musisz zrobić 2 widoki na to. –

Odpowiedz

21

Prawy widok nakładki jest umieszczony w prostokącie zwróconym przez metodę rightViewRectForBounds: odbiornika.

więc proponuję podklasy UITextField i zastąpić tę metodę, coś takiego:

@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

Cool. Jednak znalazłem dla prawidłowego wywołania widoku, lepiej korzystałem z opcji bounds.size.width - 30, to znaczy CGRect rightBounds = CGRectMake (bounds.size.width - 30, 0, 30, 50); w ten sposób uzyskuje szerokość pola tekstowego i odejmuje tę wartość, aby uzyskać dopełnienie dla odpowiedniego widoku –

-1

Dla Swift dodać zdjęcie w textField prawej stronie

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

odpowiedź @Puneet Sharma był wspaniały, ale to dałoby potrzebę stworzenia klasy, która podklasę UITextField, zamiast tego stworzyłem UIView, który działałby jako dopełnienie.

mój kod działa bez konieczności podklasy

Oto mój kod, mimo że jest napisane w 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 

Co tu się stało, to że rightView który jest UIView, który ma przezroczyste kolorowe tło, które następnie dało złudzenie, że istnieje dopełnienie, podczas gdy nie ma.