444 Stimmen

Texteinschub für UITextField?

Ich würde gerne die Text eines UITextField .

Ist dies möglich?

1 Stimmen

7voto

jeremy wilson Punkte 136

Ich habe das in IB gemacht, wo ich eine UIView hinter der textView erstellt habe, die ein bisschen länger war. Mit der textField Hintergrundfarbe auf klar eingestellt. enter image description here

7voto

zgorawski Punkte 2457

Swift 3 / Gestaltbar im Interface-Builder / Getrennte horizontale & vertikale Insekten / sofort nutzbar

@IBDesignable
class TextFieldWithPadding: UITextField {

@IBInspectable var horizontalInset: CGFloat = 0
@IBInspectable var verticalInset: CGFloat = 0

override func textRect(forBounds bounds: CGRect) -> CGRect {
    return bounds.insetBy(dx: horizontalInset, dy: verticalInset)
}

override func editingRect(forBounds bounds: CGRect) -> CGRect {
    return bounds.insetBy(dx: horizontalInset , dy: verticalInset)
}

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
    return bounds.insetBy(dx: horizontalInset, dy: verticalInset)
}
}

Verwendung:

usage

&

enter image description here

6voto

Max Punkte 595

Das ist der schnellste Weg, den ich gefunden habe, ohne irgendwelche Unterklassen zu erstellen:

UIView *spacerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10., 10.)];
[textField setLeftViewMode:UITextFieldViewModeAlways];
[textField setLeftView:spacerView];

In Swift:

let spacerView = UIView(frame:CGRect(x:0, y:0, width:10, height:10))
textField.leftViewMode = UITextFieldViewMode.Always
textField.leftView = spacerView

5voto

Christopher Pickslay Punkte 17247

Es ist absurd, dass Sie eine Unterklasse bilden müssen, da UITextField implementiert die Methoden bereits, wie @Adam Waite anmerkt. Hier ist eine Swift-Erweiterung, die eine Factory-Methode bereitstellt, die auch in unserer kategorien repo :

private class InsetTextField: UITextField {
    var insets: UIEdgeInsets

    init(insets: UIEdgeInsets) {
        self.insets = insets
        super.init(frame: CGRectZero)
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("not intended for use from a NIB")
    }

    // placeholder position
    override func textRectForBounds(bounds: CGRect) -> CGRect {
        return super.textRectForBounds(UIEdgeInsetsInsetRect(bounds, insets))
    }

    // text position
    override func editingRectForBounds(bounds: CGRect) -> CGRect {
        return super.editingRectForBounds(UIEdgeInsetsInsetRect(bounds, insets))
    }
}

extension UITextField {

    class func textFieldWithInsets(insets: UIEdgeInsets) -> UITextField {
        return InsetTextField(insets: insets)
    }

}

0 Stimmen

Der Link in Ihrer Antwort ist tot, können Sie ihn bitte aktualisieren?

0 Stimmen

Die URL wurde korrigiert @WendiKidd

5voto

Gene Loparco Punkte 1817

Hier ist das gleiche unterklassifizierte UITextField in Swift 3 geschrieben. Es unterscheidet sich deutlich von früheren Swift-Versionen, wie Sie sehen werden:

import UIKit

class MyTextField: UITextField
    {
    let inset: CGFloat = 10

    // placeholder position
    override func textRect(forBounds bounds: CGRect) -> CGRect
        {
        return bounds.insetBy(dx: inset, dy: inset)
        }

    // text position
    override func editingRect(forBounds bounds: CGRect) -> CGRect
        {
        return bounds.insetBy(dx: inset, dy: inset)
        }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect
        {
        return bounds.insetBy(dx: inset, dy: inset)
        }
    }

Sie können übrigens auch wie folgt vorgehen, wenn Sie nur den Einzug einer Seite kontrollieren wollen. Dieses Beispiel, bei dem nur der linke Einschub angepasst wird, ist praktisch, wenn Sie ein Bild über dem UITextField platzieren, es dem Benutzer aber so erscheinen soll, als befände es sich innerhalb des Textfeldes:

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

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