如何在 UITextField 子类中设置 UITextField 的属性

Posted

技术标签:

【中文标题】如何在 UITextField 子类中设置 UITextField 的属性【英文标题】:How to set property of UITextField at UITextField subclass 【发布时间】:2014-04-19 08:21:08 【问题描述】:

我有UITextField 的这个子类,我想将属性设置为UITextField 的背景颜色、边框等。我不知道,如果我使用正确的方法,因为当我将这个类用于UItextField 时,UITextField 不会改变。我必须在哪种方法中声明这个属性?

#import "defaultUITextField.h"

@implementation defaultUITextField

- (id)initWithFrame:(CGRect)frame

    self = [super initWithFrame:frame];
    if (self) 
        self.delegate = self;
        [self setBackgroundColor:([UIColor redColor])];

        UIColor *borderColor = [UIColor colorWithRed:233.0/255.0 green:233.0/255.0 blue:233.0/255.0 alpha:233.0/255.0];

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

        self.layer.borderColor = [borderColor CGColor];
        self.layer.borderWidth = 1.0f;
    
    return self;


@end

【问题讨论】:

【参考方案1】:

您的解决方案似乎是正确的。 你是如何将你的最终文本字段放在视图上的? 如果您在 Interface Builder 中创建了 TextField,那么您覆盖了错误的构造函数。

- (id)initWithCoder:(NSCoder *)inCoder 
    if (self = [super initWithCoder:inCoder]) 
        self.delegate = self;
        [self setBackgroundColor:([UIColor redColor])];

        UIColor *borderColor = [UIColor colorWithRed:233.0/255.0 green:233.0/255.0 blue:233.0/255.0 alpha:233.0/255.0];

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

        self.layer.borderColor = [borderColor CGColor];
        self.layer.borderWidth = 1.0f;
    
    return self;

当您在 IB 中创建 UITextField 并将其类更改为 UItextField 时,将调用此构造函数。

【讨论】:

我在 Storyboard 上有 UIExfield,它通过 IBOutlet 与 View 连接,IBOutlet 有一个 defaultUITextField 类,但它不起作用。只有当我在情节提要上设置课程时,您的方法才有效。不知道是不是很清楚。但我必须使用方法 initWithCoder 并在 storyBoard 上设置 defaultUITextField 类。这有点奇怪。为什么它只在视图中声明后才起作用:@property (strong, nonatomic) IBOutlet defaultUITextField *classNameTextField; 为了使控件成为自定义类,您需要直接在故事板中设置该类,因为故事板负责创建该控件的实例。如果你有 UITextField * tf = [[UITextField alloc]init]; tf - UITextField 类的实例。默认文本字段 * dtf = tf;现在 dtf 和 tf 是 UITextField 类的同一个对象。保存指向另一个变量的指针不会改变它的类。事实上,对象的类在创建后是不可能改变的。

以上是关于如何在 UITextField 子类中设置 UITextField 的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 的单独类中设置 UITextField 的委托?

如何在一个 UITextField 中设置两个不同的 NSUserDefaults

UITextField 在 Swift 中设置最大字符长度

如何在 UITextField 中设置 placeHolder / 用户文本和左边框之间的距离

如何从视图控制器的 uitextfield 在类中设置 NSString

iOS 在组件中存储随机属性,例如没有子类的 UITextField