kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 LinusGeffarth
LinusGeffarth
Question

A crea spațiu la începutul unei UITextField

Vreau să lăsați un pic de spațiu la începutul unei UITextField, doar ca aici: https://stackoverflow.com/questions/5674655/uitextfield-align-left-margin

Dar eu nu't știu cum să fac asta cu Swift.

133 2014-08-18T16:04:32+00:00 18
 Community
Community
Întrebarea editată 23 mai 2017 в 12:02
Programare
ios
cocoa-touch
uitextfield
swift
Solution / Answer
 Haagenti
Haagenti
21 noiembrie 2014 в 5:13
2014-11-21T17:13:46+00:00
Mai mult
Sursă
Editează
#25368375

Aceasta este ceea ce eu sunt, folosind chiar acum:

Swift 4.2

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: padding)
    }
}

Swift 4

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

Swift 3:

class TextField: UITextField {

    let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return UIEdgeInsetsInsetRect(bounds, padding)
    }
}

N-am pus niciodată o altă umplutură, dar puteți tweak. Această clasă nu't avea grijă de rightView și leftView pe textfield. Dacă vrei să se ocupe în mod corect, puteți folosi ceva de genul (exemplu în objc și am nevoie doar de rightView:

- (CGRect)textRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeUnlessEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    CGRect paddedRect = UIEdgeInsetsInsetRect(bounds, self.insets);

    if (self.rightViewMode == UITextFieldViewModeAlways || self.rightViewMode == UITextFieldViewModeWhileEditing) {
        return [self adjustRectWithWidthRightView:paddedRect];
    }
    return paddedRect;
}

- (CGRect)adjustRectWithWidthRightView:(CGRect)bounds {
    CGRect paddedRect = bounds;
    paddedRect.size.width -= CGRectGetWidth(self.rightView.frame);

    return paddedRect;
}
Søren Gade
Søren Gade
Răspuns editat 20 ianuarie 2019 в 2:10
252
0
 Pheepster
Pheepster
16 noiembrie 2016 в 4:06
2016-11-16T16:06:30+00:00
Mai mult
Sursă
Editează
#25368379

Dacă utilizați o extensie, nu este nevoie să subclasa UITextField și noua funcționalitate va fi disponibilă pentru orice UITextField în aplicația dvs.:

extension UITextField {
    func setLeftPaddingPoints(_ amount:CGFloat){
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.leftView = paddingView
        self.leftViewMode = .always
    }
    func setRightPaddingPoints(_ amount:CGFloat) {
        let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: amount, height: self.frame.size.height))
        self.rightView = paddingView
        self.rightViewMode = .always
    }
}

Când am nevoie pentru a seta umplutură de un câmp de text oriunde în cererea mea, eu pur și simplu faceți următoarele:

    textField.setLeftPaddingPoints(10)
    textField.setRightPaddingPoints(10)

Folosind Swift extensii, se adaugă funcționalitate la UITextField direct, fără subclasarea.

Sper că acest lucru vă ajută!

 Pheepster
Pheepster
Răspuns editat 20 iunie 2019 в 3:26
170
0
 ak2g
ak2g
5 februarie 2016 в 9:28
2016-02-05T09:28:03+00:00
Mai mult
Sursă
Editează
#25368377

X, Y , Z sunt valorile dorite

textField.layer.sublayerTransform = CATransform3DMakeTranslation(x, y, z)
67
0
 onCompletion
onCompletion
19 octombrie 2015 в 6:08
2015-10-19T06:08:34+00:00
Mai mult
Sursă
Editează
#25368376

Astfel de marjă poate fi realizat prin stabilirea leftView / rightView " la " UITextField.

Actualizat Pentru Swift 4

// Create a padding view for padding on left
textField.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.leftViewMode = .always

// Create a padding view for padding on right
textField.rightView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: textField.frame.height))
textField.rightViewMode = .always

Tocmai l-am adaugat/plasat o `UIView la stânga și la dreapta textfield. Deci, acum tastarea va începe după vizionare.

Multumesc

Sper că acest lucru a ajutat...

38
0
Teodor Ciuraru
Teodor Ciuraru
29 noiembrie 2017 в 11:59
2017-11-29T11:59:33+00:00
Mai mult
Sursă
Editează
#25368386

Swift 4, Xcode 9

Îmi place Pheepster's a răspunde, dar cum o să facem totul de la extensie, fără a necesita VC cod sau orice subclasarea:

import UIKit

@IBDesignable
extension UITextField {

    @IBInspectable var paddingLeftCustom: CGFloat {
        get {
            return leftView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            leftView = paddingView
            leftViewMode = .always
        }
    }

    @IBInspectable var paddingRightCustom: CGFloat {
        get {
            return rightView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            rightView = paddingView
            rightViewMode = .always     
        }
    }
}
31
0
 iOS
iOS
18 iulie 2018 в 1:25
2018-07-18T13:25:42+00:00
Mai mult
Sursă
Editează
#25368388

în Swift 4.2 și Xcode 10

Inițial meu câmp de text este acesta.

introduceți descrierea imaginii aici

După adăugarea de umplutură în stânga mea câmp de text este...

introduceți descrierea imaginii aici

//Code for left padding 
textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: textFieldName.frame.height))
textFieldName.leftViewMode = .always

Astfel putem crea partea dreapta, de asemenea,.(textFieldName.rightViewMode = .mereu)

Dacă doriți SharedInstance tip cod(Scrie odată ce folosim în fiecare ware) vezi codul de mai jos.

//This is my shared class
import UIKit
class SharedClass: NSObject {
    static let sharedInstance = SharedClass()

    //This is my padding function.
    func textFieldLeftPadding(textFieldName: UITextField) {
    // Create a padding view
    textFieldName.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 3, height: textFieldName.frame.height))
    textFieldName.leftViewMode = .always//For left side padding
    textFieldName.rightViewMode = .always//For right side padding
    }

    private override init() {

    }
}

Acum a apela această funcție de genul asta.

//This single line is enough
SharedClass.sharedInstance.textFieldLeftPadding(textFieldName:yourTF)
 iOS
iOS
Răspuns editat 18 ianuarie 2019 в 5:07
16
0
 livtay
livtay
10 februarie 2017 в 8:01
2017-02-10T20:01:13+00:00
Mai mult
Sursă
Editează
#25368381

Simplu swift 3 soluție - adăugați cod pentru a viewDidLoad:

let indentView = UIView(frame: CGRect(x: 0, y: 0, width: 10, height: 20))
textField.leftView = indentView
textField.leftViewMode = .always

Nu este nevoie de foarte mult cod

15
0
Hardik Thakkar
Hardik Thakkar
21 martie 2017 в 11:33
2017-03-21T11:33:41+00:00
Mai mult
Sursă
Editează
#25368384

Pentru a crea umplutură vedere pentru UITextField în Swift 5

func txtPaddingVw(txt:UITextField) {
    let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 5))
    txt.leftViewMode = .always
    txt.leftView = paddingView
}
Hardik Thakkar
Hardik Thakkar
Răspuns editat 18 mai 2019 в 5:27
10
0
Eric  Sean Conner
Eric Sean Conner
18 august 2014 в 8:29
2014-08-18T20:29:14+00:00
Mai mult
Sursă
Editează
#25368374

Subclasarea UITextField este calea de a merge. Deschide un loc de joacă și adăugați următorul cod:

class MyTextField : UITextField {
    var leftTextMargin : CGFloat = 0.0

    override func textRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }

    override func editingRectForBounds(bounds: CGRect) -> CGRect {
        var newBounds = bounds
        newBounds.origin.x += leftTextMargin
        return newBounds
    }
}

let tf = MyTextField(frame: CGRect(x: 0, y: 0, width: 100, height: 44))
tf.text = "HELLO"
tf.leftTextMargin = 25
tf.setNeedsLayout()
tf.layoutIfNeeded()
7
0
 CartoonChess
CartoonChess
28 octombrie 2018 в 1:57
2018-10-28T13:57:02+00:00
Mai mult
Sursă
Editează
#25368389

Aici este Haagenti's a răspunde actualizat la Swift 4.2:

class PaddedTextField: UITextField {

    func getPadding(plusExtraFor clearButtonMode: ViewMode) -> UIEdgeInsets {
        var padding = UIEdgeInsets(top: 11, left: 16, bottom: 11, right: 16)

        // Add additional padding on the right side when showing the clear button
        if self.clearButtonMode == .always || self.clearButtonMode == clearButtonMode {
            padding.right = 28
        }

        return padding
    }

    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .unlessEditing)
        return bounds.inset(by: padding)
    }

    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        let padding = getPadding(plusExtraFor: .whileEditing)
        return bounds.inset(by: padding)
    }

}

Referință: Upgrade La Swift 4.2.

Edit: Cont de buton clar.

 CartoonChess
CartoonChess
Răspuns editat 2 noiembrie 2018 в 8:40
7
0
 PAC
PAC
21 aprilie 2016 в 2:36
2016-04-21T14:36:52+00:00
Mai mult
Sursă
Editează
#25368378

Crea UIView cu necesar de umplutură spațiu și adăugați-l la textfield.leftView membru și a stabilit textfield.leftViewMode membru să UITextFieldViewMode.Mereu

// For example if you have textfield named title
@IBOutlet weak var title: UITextField!
// Create UIView 
let paddingView : UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
//Change your required space instaed of 5.
title.leftView = paddingView
title.leftViewMode = UITextFieldViewMode.Always
6
0
 D.Garcia
D.Garcia
13 octombrie 2017 в 1:06
2017-10-13T13:06:07+00:00
Mai mult
Sursă
Editează
#25368385

Pune acest cod în viewDidLoad()`:

textField.delegate = self

let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: self.textField.frame.height))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.always

Acesta funcționează pentru mine :)

5
0
Shanu Singh
Shanu Singh
25 iunie 2019 в 1:13
2019-06-25T13:13:18+00:00
Mai mult
Sursă
Editează
#25368392

Aceasta linie de cod m-a salvat:

Pentru Xamarin.iOS:

textField.Layer.SublayerTransform = CATransform3D.MakeTranslation(5, 0, 0);

Pentru Swift:

textField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0);
 LinusGeffarth
LinusGeffarth
Răspuns editat 25 iunie 2019 в 1:14
4
0
Photon Point
Photon Point
13 martie 2017 в 1:32
2017-03-13T13:32:34+00:00
Mai mult
Sursă
Editează
#25368382

În Swift 3. Puteți utiliza personalizat UITextField cu liniuță, care este stabilit în constructor. Don't nevoie pentru un plus de declarație într-un controler.

class CustomTextField : UITextField {

private let indentView = UIView(frame: CGRect(x: 0, y:0, width: 10, height: 10))

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.leftView = indentView
    self.leftViewMode = .always 
        }
}
4
0
 spogebob92
spogebob92
22 decembrie 2016 в 10:35
2016-12-22T10:35:50+00:00
Mai mult
Sursă
Editează
#25368380

Sperietoarea's a răspunde Rapid în 3

let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

override func textRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}

override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}

override func editingRect(forBounds bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}
4
0
Musa almatri
Musa almatri
16 mai 2018 в 8:04
2018-05-16T20:04:35+00:00
Mai mult
Sursă
Editează
#25368387

Modalitate ușoară de: pentru a face acest lucru prin extinderea UITextField

extension UITextField {

   func setPadding(left: CGFloat? = nil, right: CGFloat? = nil){
       if let left = left {
          let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: left, height: self.frame.size.height))
          self.leftView = paddingView
          self.leftViewMode = .always
       }

       if let right = right {
           let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: right, height: self.frame.size.height))
           self.rightView = paddingView
           self.rightViewMode = .always
       }
   }

}

Apoi, puteți seta umplutură la orice margine de acest fel:

textField.setPadding(left: 5, right: 5)
3
0
Payne Miller
Payne Miller
2 decembrie 2018 в 3:43
2018-12-02T03:43:09+00:00
Mai mult
Sursă
Editează
#25368390

Eu prefer să folosesc IBDesignable clasa și IBInspectable properties pentru a-mi permite să setați padding prin Xcode scenarii și păstrați-l reutilizabile. Am'am actualizat, de asemenea, codul pentru a lucra în Swift 4.

import Foundation
import UIKit

@IBDesignable
class PaddableTextField: UITextField {

    var padding = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

    @IBInspectable var left: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var right: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var top: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    @IBInspectable var bottom: CGFloat = 0 {
        didSet {
            adjustPadding()
        }
    }

    func adjustPadding() {
         padding = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)

    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
         return bounds.inset(by: UIEdgeInsets(top: top, left: left, bottom: bottom, right: right))
    }
}
2
0
Emil Georgiev
Emil Georgiev
26 mai 2019 в 11:31
2019-05-26T23:31:19+00:00
Mai mult
Sursă
Editează
#25368391

Extinderea UITextField în Swift 5

import UIKit

@IBDesignable
extension UITextField {

    @IBInspectable var paddingLeftCustom: CGFloat {
        get {
            return leftView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            leftView = paddingView
            leftViewMode = .always
        }
    }

    @IBInspectable var paddingRightCustom: CGFloat {
        get {
            return rightView!.frame.size.width
        }
        set {
            let paddingView = UIView(frame: CGRect(x: 0, y: 0, width: newValue, height: frame.size.height))
            rightView = paddingView
            rightViewMode = .always
        }
    }

}
2
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
ALEX EPRST
Înregistrat 14 ore în urmă
2
Daniel Gogov
Înregistrat 1 săptămână în urmă
3
工藤 芳則
Înregistrat 2 săptămâni în urmă
4
Ирина Беляева
Înregistrat 2 săptămâni în urmă
5
Darya Arsenyeva
Înregistrat 3 săptămâni în urmă
ES
ID
JA
KO
RO
RU
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire