使用UITextBorderStyleNone为UITextField设置填充


398

我想为我的使用自定义背景UITextFields。除了我必须UITextBorderStyleNone使它看起来很漂亮以外,这个效果很好。这将迫使文本粘贴到左侧而没有任何填充。

我是否可以手动设置填充,使其看起来与UITextBorderStyleRoundedRect使用自定义背景图像的填充类似?

Answers:


837

我发现了一个巧妙的小技巧,可以为这种情况设置左侧填充。

基本上,您将的leftView属性设置UITextField为所需填充大小的空视图:

UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
textField.leftView = paddingView;
textField.leftViewMode = UITextFieldViewModeAlways;

对我来说就像一个魅力!

Swift 3 / Swift 4中,可以这样做

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

1
确实是我所需要的,除了我需要在右边进行填充(当然,这几乎是相同的)。谢谢!
cg。

@Lukasz我在此答案(已接受的答案)中添加了自动发布。第一行。编辑:糟糕,也许我没有保存?还是我的编辑被拒绝了?无论哪种方式,Vincent都添加了自动发行,所以对!
埃里克·戈德堡

1
使用ARC,如果我重复*paddingView使用多个文本字段,为什么我的应用程序会挂起并占用大量CPU ?
松饼人

3
这是一个糟糕的解决方案,最好是Nate Flink的解决方案。这不包括版本编辑模式填充。
JacekKwiecień13年

3
它不适用于多个文本字段。只是会消耗大量内存,然后崩溃。
鸟笼

177

我创建了该类别实现,并将其添加到.m文件的顶部。

@implementation UITextField (custom)
    - (CGRect)textRectForBounds:(CGRect)bounds {
        return CGRectMake(bounds.origin.x + 10, bounds.origin.y + 8,
                          bounds.size.width - 20, bounds.size.height - 16);
    }
    - (CGRect)editingRectForBounds:(CGRect)bounds {
        return [self textRectForBounds:bounds];
    }
@end

根据链接提供的Piotr Blasiak。创建一个新的子类似乎更简单,而添加其他子类也更简单UIView。不过,似乎无法控制文本字段内的填充似乎缺少了一些东西。

Swift 4解决方案:

class CustomTextField: UITextField {
    struct Constants {
        static let sidePadding: CGFloat = 10
        static let topPadding: CGFloat = 8
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return CGRect(
            x: bounds.origin.x + Constants.sidePadding,
            y: bounds.origin.y + Constants.topPadding,
            width: bounds.size.width - Constants.sidePadding * 2,
            height: bounds.size.height - Constants.topPadding * 2
        )
    }

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

6
这会引发有关类别覆盖方法的警告。查看此答案以抑制它们。
pdenya 2012年

5
我宁愿不按类别进行此操作,但除此以外,这是比接受的答案更干净的解决方案。
Bob Vork 2012年

2
最好将CGRectInset()用于这样的事情,而不要自己动手。看起来也更干净:return CGRectInset(bounds,10,8);
丹尼斯·蒙西

1
@shashwat是的,您可以指定您想要的任何填充
Ege

1
当我在4年前添加此内容时,iOS的情况有所不同,我同意现在最好创建一个子类。但是,如果您只想用一种快速而肮脏的方式直观地检查您的像素距离,就可以做到;)因此,人们继续投票是可以的!
Nate Flink,2015年

139

Xcode> 6的Swift 3版本,您可以在Interface Builder / Storyboard中编辑插入值。

import UIKit

@IBDesignable
class FormTextField: UITextField {

    @IBInspectable var inset: CGFloat = 0

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

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

}

在此处输入图片说明


1
我看不到我的表单文本字段。
okysabeni 2015年

2
我需要添加此行override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
Michael

2
这个答案对于做某事@IBDesignable@IBInspectable做某事的解释或链接的解释会更有用,例如,nshipster上的这篇文章
Russell Austin

1
如果您依赖任何附件视图(例如UITextField上的清除按钮功能),return super.textRectForBounds(CGRectInset(bounds, inset, inset))则将正确处理与附件视图的偏移量。
Mike Fay 2015年

@okysabeni您需要单击您的文本字段并将Class更改为FormTextField
Gustavo Barbosa

77

编辑:仍可在iOS 11.3.1中使用

在iOS 6中 myTextField.leftView = paddingView;中引起问题

这样解决了问题

myTextField.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0)

对于右对齐的文本字段,请使用latenitecoder在注释中CATransform3DMakeTranslation(-5, 0, 0)提到的内容


1
很好,我不得不在应用程序的所有文本字段中添加填充,创建了一个UITextField类别,并将此代码放入-(void)awakeFromNib {}中,这解决了我的问题
Teena nath Paul

很简单!Thx :)我有一个问题,我如何制作一个简单的代码来制作所有UITextField而不是多次编写代码?
Luai Kalkatawi'2

1
所有其他注释均假定您要从左侧填充UITextField。子类化要添加一些间距id而不是仅仅添加一些空白字符会带来很多开销,但这是解决方案。一线未来的证明。如果您使用的是文本右对齐的文本字段,请使用负值(-5,0,0),谢谢Inder
latenitecoder 2015年

1
4年后,我找到了自己的答案:D,@latenitecoder您的评论是需要的。更新答案
Inder Kumar Rathore

1
如果我想要左右两侧的填充,该怎么办?
米娜·汉娜

70

向UITextField添加填充的一种好方法是子类化并添加edgeInsets属性。然后,您设置edgeInsets,并将相应绘制UITextField。使用自定义的leftView或rightView集也可以正常运行。

OSTextField.h

#import <UIKit/UIKit.h>

@interface OSTextField : UITextField

@property (nonatomic, assign) UIEdgeInsets edgeInsets;

@end

OSTextField.m

#import "OSTextField.h"

@implementation OSTextField

- (id)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if (self) {
        self.edgeInsets = UIEdgeInsetsZero;
    }
    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if(self){
        self.edgeInsets = UIEdgeInsetsZero;
    }
    return self;
}

- (CGRect)textRectForBounds:(CGRect)bounds {
    return [super textRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [super editingRectForBounds:UIEdgeInsetsInsetRect(bounds, self.edgeInsets)];
}

@end

这应该被接受。这也适用于左,右的观点..
NSPratik

25

只是这样子类UITextField:

@implementation DFTextField


- (CGRect)textRectForBounds:(CGRect)bounds
{
    return CGRectInset(bounds, 10.0f, 0);
}

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


@end

这将在任一侧添加10点的水平填充。


21

目标C代码

MyTextField.h

#import <UIKit/UIKit.h>

@interface MyTextField : UITextField

@property (nonatomic) IBInspectable CGFloat padding;

@end

MyTextField.m

#import "MyTextField.h"

IB_DESIGNABLE
@implementation MyTextField

@synthesize padding;

-(CGRect)textRectForBounds:(CGRect)bounds{
    return CGRectInset(bounds, padding, padding);
}

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

@end

在此处输入图片说明



20
  1. 创建一个文本字段自定义

PaddingTextField.swift

import UIKit
class PaddingTextField: UITextField {

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

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

override func editingRectForBounds(bounds: CGRect) -> CGRect {
    return textRectForBounds(bounds)
}}
  1. 设置您的textfield类为PaddingTextField并根据需要自定义填充 在此处输入图片说明 在此处输入图片说明

  2. 好好享受

最后


19

根据Evil Trout的回答,您可能想要创建一个类别,以使其更易于在多个应用程序中使用。

头文件:

@interface UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue;

-(void) setRightPadding:(int) paddingValue;
@end

实施文件:

#import "UITextField+PaddingText.h"

@implementation UITextField (PaddingText)

-(void) setLeftPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.leftView = paddingView;
    self.leftViewMode = UITextFieldViewModeAlways;
}

-(void) setRightPadding:(int) paddingValue
{
    UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, paddingValue, self.frame.size.height)];
    self.rightView = paddingView;
    self.rightViewMode = UITextFieldViewModeAlways;
}

@end

使用范例

#import "UITextField+PaddingText.h"

[self.YourTextField setLeftPadding:20.0f];

希望它可以帮助您

干杯


14

迅捷版:

extension UITextField {
    @IBInspectable var padding_left: CGFloat {
        get {
            LF.log("WARNING no getter for UITextField.padding_left")
            return 0
        }
        set (f) {
            layer.sublayerTransform = CATransform3DMakeTranslation(f, 0, 0)
        }
    }
}

这样您就可以在IB中分配值

接口构建器中表示的IBInspectable设置


IBInspectable允许您在运行时应用setter代码,因此只需输入您的号码即可Interface Builder使用。
superarts.org

当您拥有时,这将不起作用Clear Button。如果应用此解决方案,您的清除按钮将不可见。
Bhavin_m

11

您无法设置填充。取而代之的UIView是带有背景图片及其UITextField内部的图片。类似地,将UITextFieldwidth 设置为UIViewWidth-(paddingSize x 2)and,然后将其设置在point paddingSize,paddingSize


9

像这样子类化UITextFieldSwift版本):

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)
    }

}

这将在两侧增加25.0点的水平填充。


8

我基于Nate的解决方案,但是后来我发现,当您使用leftView / rightView属性时,这会导致问题,因此它会更好地调整super的实现,因为它将考虑到左/右视图。

- (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];
}

6

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)
    }
}

6

使用UITextBorderStyleNone设置UITextField的填充:Swift

基于@Evil Trout投票最多的答案,我在ViewController类中创建了一个自定义方法,如下所示:

- (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]];
}

现在,我可以在内部调用该方法(viewDidLoad方法),并将我的任何TextField发送至该方法,并为左右添加填充,并通过仅编写一行代码来为文本和背景色添加颜色,如下所示:

[self modifyTextField:self.firstNameTxtFld];

这在iOS 7上完美运行!我知道添加过多的View可能会使该类的加载变得更重。但是,当担心其他解决方案中的困难时,我发现自己更偏向于这种方法,并且使用这种方式更加灵活。;)

感谢您的骇客“邪恶鳟鱼”!(弓)

我以为应该用Swift更新此答案的代码片段:

由于Swift允许我们为现有类编写扩展,因此我们以这种方式编写它。

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()
    }
}

用法:

self.firstNameTxtFld.addPaddingToTextField()

希望这对其他人有所帮助!
干杯!


5

这是在SWIFT中实现此目标的方法

@IBOutlet weak var yourTextField: UITextField!

override func viewDidLoad() {
super.viewDidLoad()
let paddingView = UIView(frame: CGRectMake(0, 0, 10, self.yourTextField.frame.height))
yourTextField.leftView = paddingView
yourTextField.leftViewMode = UITextFieldViewMode.Always
}
}

资源资源


5

Swift 2.0版本:

let paddingView: UIView = UIView(frame: CGRectMake(0, 0, 5, 20))
textField.leftView = paddingView
textField.leftViewMode = UITextFieldViewMode.Always;

4

^这些建议对于以编程方式创建界面的人来说非常有用。

但是对于使用Xcode接口构建器的我们来说,有两种轻松的方法:

  • 更简单:将UIImageView放在文本字段后面

  • 最简单的方法:将您的边框样式更改为简单的黑色正方形(从左数第二个选项),然后将您的图像添加为背景图像。图像优先于正方形,因此您仍然可以获得正常图像背景所需的填充,而无需实际绘制正方形。

编辑:您还可以使用黑色球体(在IB中选择UITextBox时,从左数第三个选项),它不适用于最右边的“图形球体”样式。


在某些情况下,更简单的解决方案确实是一个有效的选择,但最简单的解决方案是破解,如果图像的边缘像素具有可变的alpha值,它也将不起作用(更不用说Apple可以在将来的iOS版本中更改其实现)。
jmdecombe 2015年

我不同意您的意见,这就是为什么我在所有大写字母中都使用“懒惰简单的方式”。到目前为止,它对我来说还算不错。
woody121'2

4

如果有人在寻找Swift 4.0版本,那么下面的方法extension是可行的。它兼有LeftRight填充UITextField。其实是IBInspectable用于情节提要配置。您可以直接从Interface Builder / Storyboard设置值。这是经过Swift 4.0版本和Xcode 9.0测试的代码

请记住,如果要启用Clear Button相同的功能,UITextField则必须将Right Padding保留为空白。

import UIKit

extension UITextField {

    @IBInspectable var paddingLeft: 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 paddingRight: 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     
        }
    }
}  

3

最好的方法是简单地使用UITextField的子类并在.m文件中创建一个类

 #import "CustomTextField.h"
 #import <QuartzCore/QuartzCore.h>
 @implementation CustomTextField


- (id)initWithCoder:(NSCoder*)coder 
 {
  self = [super initWithCoder:coder];

  if (self) {

//self.clipsToBounds = YES;
//[self setRightViewMode:UITextFieldViewModeUnlessEditing];

self.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0,15,46)];
self.leftViewMode=UITextFieldViewModeAlways;
   }

  return self;

 }

通过执行此操作,转到您的情节提要或xib,然后单击身份检查器,然后在类选项中将UITextfield替换为您自己的“ CustomTextField”。

注意:如果您只为文本字段提供自动布局填充,则您的应用程序将无法运行,仅显示空白屏幕。


3

Swift 3版本:

class CustomTextField:UITextField{

    required init?(coder aDecoder: NSCoder){
        super.init(coder: aDecoder)
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
    }

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

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

2

Nate Flink的 答案是我的最爱,但不要忘了右视图/左视图。例如,UITextField子类:

override func rightViewRectForBounds(bounds: CGRect) -> CGRect {
    let rightViewBounds = super.rightViewRectForBounds(bounds)

    return CGRectMake(CGRectGetMinX(rightViewBounds) - 10, CGRectGetMinY(rightViewBounds), CGRectGetWidth(rightViewBounds), CGRectGetHeight(rightViewBounds))
}

上面的代码中设置右填充了rightViewUITextField


2

Swift 3解决方案

class CustomTextField: UITextField {

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

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

2

这是在UITextfield中进行填充的Swift代码

 func txtPaddingVw(txt:UITextField) {
     let paddingView = UIView(frame: CGRectMake(0, 0, 10, 10))
     txt.leftViewMode = .Always
     txt.leftView = paddingView
 }

并使用

self.txtPaddingVw(txtPin)

2

您可以使用类别。将填充设置为左右

UITextField + Padding.h

@interface UITextField (Padding)
@property (nonatomic, assign) CGFloat paddingValue;
@property (nonatomic, assign) CGFloat leftPadding;
@property (nonatomic, assign) CGFloat rightPadding;

//overwrite
-(CGRect)textRectForBounds:(CGRect)bounds;
-(CGRect)editingRectForBounds:(CGRect)bounds;
@end

UITextField + Padding.m

#import "UITextField+Padding.h"
#import <objc/runtime.h>

static char TAG_LeftPaddingKey;
static char TAG_RightPaddingKey;
static char TAG_Left_RightPaddingKey;

@implementation UITextField (Padding)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(CGRect)textRectForBounds:(CGRect)bounds {

CGFloat offset_Left=0;
CGFloat offset_Right=0;
if (self.paddingValue>0) {
    offset_Left=self.paddingValue;
    offset_Right=offset_Left;
}else{
    if (self.leftPadding>0){
        offset_Left=self.leftPadding;
    }
    if (self.rightPadding>0){
        offset_Right=self.rightPadding;
    }
}

if (offset_Left>0||offset_Right>0) {
    return CGRectMake(bounds.origin.x+ offset_Left ,bounds.origin.y ,
                      bounds.size.width- (offset_Left+offset_Right), bounds.size.height-2 );
 }else{
    return bounds;
 }
}



-(CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}
#pragma clang diagnostic pop


#pragma maek -setter&&getter
- (CGFloat)paddingValue
{
    return [objc_getAssociatedObject(self,&TAG_Left_RightPaddingKey) floatValue];
}
-(void)setPaddingValue:(CGFloat)paddingValue
{
    objc_setAssociatedObject(self, &TAG_Left_RightPaddingKey, @(paddingValue), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(CGFloat)leftPadding
{
    return [objc_getAssociatedObject(self,&TAG_LeftPaddingKey) floatValue];
}

-(void)setLeftPadding:(CGFloat)leftPadding
{
    objc_setAssociatedObject(self, &TAG_LeftPaddingKey, @(leftPadding), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

-(CGFloat)rightPadding
{
    return [objc_getAssociatedObject(self,&TAG_RightPaddingKey) floatValue];
}

-(void)setRightPadding:(CGFloat)rightPadding
{
    objc_setAssociatedObject(self, &TAG_RightPaddingKey, @(rightPadding), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

您可以像这样设置填充 self.phoneNumTF.paddingValue = 10.f; 或self.phoneNumTF.leftPadding = 10.f;


1

@邪恶鳟鱼的答案很棒。我已经使用这种方法已有一段时间了。它唯一缺少的是“处理大量文本字段”。我尝试了其他方法,但似乎没有用。

子类化UITextField只是为了添加填充对我没有任何意义。因此,我遍历了所有UITextFields以添加填充。

-(void) addPaddingToAllTextFields:(UIView*)view {

    for(id currentView in [view subviews]){
        if([currentView isKindOfClass:[UITextField class]]) {
            // Change value of CGRectMake to fit ur need
            [currentView setLeftView:[[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 20)]];
            [currentView setLeftViewMode:UITextFieldViewModeAlways];
        }

        if([currentView respondsToSelector:@selector(subviews)]){
            [textfieldarray addObjectsFromArray:[self addPaddingToAllTextFields:currentView]];
        }
    }
}

该方法可以通过[self addPaddingToAllTextFields:[self view]]调用;
Kishor Kundan

由于textfieldarray在第二个没有定义if块,我用这个片段(谢谢!)成功替换第二的内容后,iffor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
adamup

1

Brody的解决方案对我来说非常完美。我不得不在文本字段上添加侧视图并添加其他填充。因此,通过对UITextField子类实现自定义UIEdgeInsets属性,我设法实现了这一任务。我将在所有项目中使用这个新的子类。


1

到目前为止,我发现的最佳解决方案是类别。这就是我在左侧和右侧添加5点填充的方式:

@implementation UITextField (Padding)

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectMake(bounds.origin.x + 5, bounds.origin.y,
                      bounds.size.width - 10, bounds.size.height);
}
- (CGRect)editingRectForBounds:(CGRect)bounds {
    return [self textRectForBounds:bounds];
}
#pragma clang diagnostic pop

@end

#pragma仅用于消除烦人的警告


类别中方法重载的原因是,实际上它会在AppCode中标记为未使用。好主意,但不是很安全,因为在运行“优化导入”时可以轻松删除它(尽管对于Xcode用户而言没有问题,但是我们都知道有限的以代码为中心的功能)
Sebastian Wramba 2014年

1
它是一个简单的类别,将为应用程序中的所有文本字段应用填充吗?
Ben Sinclair 2014年

@Andy不,它仅在导入时才适用,您将需要创建一个UITextField + Padding类,并将其导入您具有填充文本

@MongiZaidi:你错了。它是否链接到可执行文件中,与导入是否无关紧要。
Zsolt Szatmari '16


0

另一个考虑因素是,如果要UITextField添加填充的地方不只一个,UIView则为每个文本字段创建一个单独的字段-因为它们无法共享。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.