419 Stimmen

Padding für UITextField mit UITextBorderStyleNone festlegen

Ich wollte einen benutzerdefinierten Hintergrund für meine UITextFields . Das funktioniert gut, bis auf die Tatsache, dass ich die UITextBorderStyleNone damit es schön aussieht. Dadurch wird der Text gezwungen, ohne Polsterung auf der linken Seite zu bleiben.

Kann ich eine Polsterung manuell einstellen, so dass sie ähnlich aussieht wie UITextBorderStyleRoundedRect außer der Verwendung meines benutzerdefinierten Hintergrundbildes?

12voto

Thomas Clayson Punkte 29220

Sie können keine Polsterung einstellen. Stattdessen haben Sie eine UIView das Ihr Hintergrundbild enthält, und die UITextField in ihm. Stellen Sie die UITextField Breite als UIViewWidth-(paddingSize x 2) und die Höhe in ähnlicher Weise und setzen Sie ihn dann auf den Punkt paddingSize,paddingSize .

11voto

King-Wizard Punkte 15270

Einfach Unterklasse UITextField wie diese ( Schnelle Version ):

import UIKit

class CustomTextField: UITextField {

    override func textRectForBounds(bounds: CGRect) -> CGRect {
       return CGRectInset(bounds, 25.0, 0)
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
       return self.textRectForBounds(bounds)
    }

}

Dies fügt eine horizontale Polsterung von 25.0 Punkte auf beiden Seiten.

8voto

Stoto Punkte 410

Ich war auf der Grundlage von Nate's Lösung, aber dann fand ich es, dass dies Probleme verursacht, wenn Sie die leftView/rightView-Eigenschaften verwenden, so seine bessere Abstimmung der Super-Implementierung, weil es die linke/rechte Ansicht zu berücksichtigen.

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect ret = [super textRectForBounds:bounds];
    ret.origin.x = ret.origin.x + 5;
    ret.size.width = ret.size.width - 10;
    return ret;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}

7voto

Beninho85 Punkte 3175

Aktualisierte Version für Swift 3:

@IBDesignable
class FormTextField: UITextField {

    @IBInspectable var paddingLeft: CGFloat = 0
    @IBInspectable var paddingRight: CGFloat = 0

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

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return textRect(forBounds: bounds)
    }
}

6voto

Randika Vishman Punkte 7603

Padding für UITextField mit UITextBorderStyleNone einstellen: Swift

Basierend auf der meistgewählten Antwort von @Evil Trout habe ich eine benutzerdefinierte Methode in meiner ViewController-Klasse erstellt, wie unten gezeigt:

- (void) modifyTextField:(UITextField *)textField
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
    textField.leftView = paddingView;
    textField.leftViewMode = UITextFieldViewModeAlways;
    textField.rightView = paddingView;
    textField.rightViewMode = UITextFieldViewModeAlways;

    [textField setBackgroundColor:[UIColor whiteColor]];
    [textField setTextColor:[UIColor blackColor]];
}

Jetzt kann ich diese Methode innerhalb (viewDidLoad-Methode) aufrufen und jedes meiner TextFields an diese Methode senden und Polsterungen für rechts und links hinzufügen sowie Text- und Hintergrundfarben angeben, indem ich nur eine Zeile Code schreibe, wie folgt:

[self modifyTextField:self.firstNameTxtFld];

Dies funktionierte perfekt auf iOS 7! Ich weiß, dass das Hinzufügen von zu vielen Ansichten könnte diese ein bisschen schwerer Klasse zu geladen werden. Aber wenn besorgt über die Schwierigkeiten in anderen Lösungen, fand ich mich mehr voreingenommen zu dieser Methode und flexibler mit dieser Art und Weise zu verwenden ;)

Danke für den Hack "Böse Forelle"! (Verbeugung)

Ich dachte, ich sollte den Codeschnipsel dieser Antwort mit Swift aktualisieren:

Da Swift es uns erlaubt, Erweiterungen für die bestehenden Klassen zu schreiben, sollten wir es auf diese Weise tun.

extension UITextField {
    func addPaddingToTextField() {
        let paddingView: UIView = UIView.init(frame: CGRectMake(0, 0, 8, 20))
        self.leftView = paddingView;
        self.leftViewMode = .Always;
        self.rightView = paddingView;
        self.rightViewMode = .Always;

        self.backgroundColor = UIColor.whiteColor()
        self.textColor = UIColor.blackColor()
    }
}

Verwendung:

self.firstNameTxtFld.addPaddingToTextField()

Ich hoffe, dies ist für andere hilfreich!
Zum Wohl!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X