我正在开发一个iPhone应用程序,并试图在其上创建一个自定义TextField,如下图所示。
从图像中可以看出标签由用户输入或从数据库读取的值更改。除了名称之外,还有其他文本字段。
我无法确定如何实现此自定义文本字段?
我认为将“Name:”文本的图像放置到文本字段的背景并在其上放置“Label”值的一种方法,另一种方法是放置一个只有边框的图像并在其上插入“Name:Label”文本。 / p>
这些方式是否合适或是否有其他最佳方法可用?
编辑:图像上的边框是文本字段的边框; “名称:标签”也在文本字段上方。
答案 0 :(得分:0)
只需在标签或文本字段后面或旁边放置另一个带有所需文字的标签即可填写。您可以根据自己的喜好设置font
和textColor
甚至alpha
。
确保如果它们重叠(它们不应该!),标签的backgroundColor
属性设置为[UIColor clearColor]
。
您可以像这样继承UITextField
:
@interface LabeledTextField : UIView
@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UITextField *textField;
@end
#define kPercentWidth 0.5
@implementation LabeledTextField
-initWithCoder:(NSCoder)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
CGRect f = self.frame;
_label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,
f.size.width*kPercentWidth,f.size.height)];
_textField = [[UITextField alloc] initWithFrame:CGRectMake(0,0,
f.size.width*(1-kPercentWidth),f.size.height)];
[self addSubView:_label];
[self addSubView:_textField];
}
return self;
}
@end
然后您可以像这样使用它:将UIView
插入故事板视图控制器并将类更改为LabeledTextField
。这将确保调用initWithCoder
。否则,您可能必须将init代码放入其自己的setup
函数中,并通过覆盖initWithFrame
来调用它。确保您使用插座连接视图
// .h
#include LabeledTextField.h
//...
@property (nonatomic, strong) IBOutlet LabeledTextField *labeledTextField;
// .m, in some method
labeledTextField.textField.text = @"editable text";
labeledTextField.label.text = @"non-editable text";
同样,您可以修改标签和文本字段的所有属性,包括颜色,字体等。