如何在 iOS 中为 UITextField 提供填充?
Posted
技术标签:
【中文标题】如何在 iOS 中为 UITextField 提供填充?【英文标题】:How to give padding to UITextField in iOS? 【发布时间】:2015-09-14 03:01:23 【问题描述】:我想从左侧向文本字段添加填充。我已向文本字段添加背景图像,因为文本字段中的文本总是从最左边开始。我尝试了以下解决方案,但这不适用于太多文本字段.
UIView *fieldEmail = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 10)];
self.txt_fname.leftViewMode = UITextFieldViewModeAlways;
self.txt_fname.leftView = fieldEmail;
请建议我一些简单的解决方案,我不必创建单独的视图来提供填充。
问题中接受的答案对我不起作用。 Set padding for UITextField with UITextBorderStyleNone
【问题讨论】:
Set padding for UITextField with UITextBorderStyleNone的可能重复 将您的第 3 行代码移动到第 2 行,同时添加文本字段委托 @Sujay 这不是一个好的解决方案,因为上面的代码用户需要为每个文本字段设置,例如,如果您在注册表单中有 20 个文本文件,那么您必须像上述个人一样为 20 个文本文件编码。 @Nitin,你是绝对正确的。对于少数领域,我们可以更喜欢上述方法。对于多个文本字段,我们应该使用子类化方法,但正如 deepak 只为 1 个字段所做的那样,这是最简单和首选的解决方案 @Sujay 正如你在 OP 中看到的那样,他说I have tried below solution but that does not work for too many text fields.
所以我建议使用我的答案是创建一个适用于 allUITextField 的类别很有帮助。
【参考方案1】:
您可以像下面的代码一样创建一个 UITextFiled 类别:
.H 类
#import <UIKit/UIKit.h>
@interface UITextField (Textpadding)
-(CGRect)textRectForBounds:(CGRect)bounds;
-(CGRect)editingRectForBounds:(CGRect)bounds;
@end
.M 类
#import "UITextField+Textpadding.h"
@implementation UITextField (Textpadding)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(CGRect)textRectForBounds:(CGRect)bounds
return CGRectMake(bounds.origin.x+20 , bounds.origin.y ,
bounds.size.width , bounds.size.height-2 );
-(CGRect)editingRectForBounds:(CGRect)bounds
return [self textRectForBounds:bounds];
此类别将在运行时默认设置所有文本文件填充。
如何创建类别
按 cmd+n 创建新类并选择 Objective-c 类。 然后选择如下类别。 设置类名。 设置文件名。现在我的答案就是在这个类中编写代码。
【讨论】:
如何创建这样的文件。TextPadding 不被识别为符号。 @NitinGohel 很好解释【参考方案2】:另一个更简单快捷的解决方案是您制作一个图像视图并在其中为文本字段添加图像。然后在 imageview 的顶部添加真正的文本字段,并根据需要移动它,例如,当您想要左填充时,您可以将文本字段从 imageview 的 x 坐标移动一点。
【讨论】:
以上是关于如何在 iOS 中为 UITextField 提供填充?的主要内容,如果未能解决你的问题,请参考以下文章
iOS - 在自定义 UITableViewCell 中为 UITextField 添加目标/操作
swift 如何在Swift中为UITextField设置填充。