2015-08-04 6 views

Odpowiedz

12

https://stackoverflow.com/a/27066764/846780

Ta odpowiedź jest bardzo jasne,

  1. Jeśli podklasy UITextField można zastąpić textRectForBounds, editingRectForBounds i placeholderRectForBounds. Te metody pozwalają tylko dodać rect (ramkę) do etykiety pola tekstowego.

  2. newBounds metoda utwórz rect (ramkę), która zostanie dodana do etykiety pola tekstowego.

  3. Wreszcie Twój padding: let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

  4. Teraz masz niestandardową UITextField, który ma niestandardową wyściółkę.

  5. Jeśli utworzysz nową subClass, na przykład class MyTextField: UITextField, wystarczy zmienić tylko klasę UITextField, którą dodałeś do pliku IB.

enter image description here

+0

Dziękuję bardzo! Zapomniałem zmienić klasę mojego pola tekstowego na nową podklasę. Wypełnienie jest teraz ustawione na domyślne wypełnienie (top: 0, left: 5, bottom: 0, right: 5). Co się stanie, jeśli chcę zmodyfikować dopełnienie bez edytowania podklasy za każdym razem? Dodałem to do viewController "myTextField.textRectForBounds (CGRect (x: 20, y: 0, szerokość: 0, wysokość: 0))", ponieważ chcę uzyskać więcej padding od lewej. Ale nic się nie zmieniło. Czy możesz mi w tym pomóc? – sekaisan

9

Tworzenie wylot TextField i użyć poniższy kod. Powiedz "nameTextField", aby dodać dopełnienie.

let paddingView = UIView(frame: CGRectMake(x: 0, y: 0, width: 30, height: 30)) 
nameTextField.leftView = paddingView 
nameTextField.leftViewMode = .always 
nameTextField.placeholder = "Enter Name" 

Możesz dodać obraz w paddingView.

9

Uzupełniając odpowiedź klevison-Matias jest to kod używam, kiedy chcę dodać dopełnienie do mojego TextField w Swift 3

//UITextField : override textRect, editingRect 
class LeftPaddedTextField: UITextField { 

    override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y, width: bounds.width, height: bounds.height) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y, width: bounds.width, height: bounds.height) 
    } 

} 

Wtedy w moim TextField używam w ten sposób:

let emailTextField: LeftPaddedTextField = { 
    let textField = LeftPaddedTextField() 
    textField.placeholder = "Enter email" 
    textField.layer.borderColor = UIColor.lightGray.cgColor 
    textField.layer.borderWidth = 1 
    textField.keyboardType = .emailAddress 
    return textField 
}() 

let passwordTextField: LeftPaddedTextField = { 
    let textField = LeftPaddedTextField() 
    textField.placeholder = "Enter password" 
    textField.layer.borderColor = UIColor.lightGray.cgColor 
    textField.layer.borderWidth = 1 
    textField.isSecureTextEntry = true 
    return textField 
}() 
+0

Nie musisz odejmować swoich wypustek od szerokości zwróconego CGRect? W przeciwnym razie twój tekst zablokuje clearTextIndicator lub inne widoki zawarte w UITextField. – finngu

0

Na podstawie odpowiedzi @Jorge Casariego wymyśliłem to rozwiązanie.

Możesz ustawić klasę PaddedTextField i wymaganą dopełnienie poprzez Konstruktor interfejsów!

Powiązane problemy