是否有一个内置的方式,以一个字符添加前缀到UITextField
像下面的屏幕截图?
如果没有,什么是完成这一任务的最好的,最直接的方法是什么? 我想到的是background
属性可能能够做到这一点。
是否有一个内置的方式,以一个字符添加前缀到UITextField
像下面的屏幕截图?
如果没有,什么是完成这一任务的最好的,最直接的方法是什么? 我想到的是background
属性可能能够做到这一点。
简单地增加一个灰色UILabel
在顶部UITextField
的伎俩:
注意UILabel
就像一个背景图片,输入的文本停留在顶端:
UPDATE
此外,您可以添加一些填充到UITextField
使用下面的代码:
UIView *thePadding = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
theTextField.leftView = thePadding;
theTextField.leftViewMode = UITextFieldViewModeAlways;
这样的文字不能覆盖前缀字符。
调整矩形,使其在你的情况正常工作。
从继安妮的代码,你也可以做到这一点直接在代码中没有的UILabel在IB和UIView的代码:
UILabel *poundLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 5, 20)];
poundLabel.text = @"£";
[self.paymentAmount setLeftView:poundLabel];
[self.paymentAmount setLeftViewMode:UITextFieldViewModeAlways];
随着Ditiet的解决方案 (使用尺寸为15的系统字体视网膜),文本字段放置它的文本0.5点太近美元符号。 使用-sizeWithAttributes:
我适合width
美元符号标签至约8.5,但该文本字段以定位它的文本x
的8(左视图的宽度的底板)。
我发现了两个解决方案,以完美的美元符号(左视图)与文本之间的相对位置。
美元符号标签的宽度设置为美元符号(或硬编码)的宽度的上限。 然后,右对齐美元符号标签的文本。
UIFont *font = [UIFont systemFontOfSize:15];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 200, 120, 44)];
textField.font = font;
NSString *dollarSignText = @"$";
CGSize size = [dollarSignText sizeWithAttributes:@{NSFontAttributeName: font}];
UILabel *dollarSignLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ceilf(size.width), 44)];
dollarSignLabel.font = font;
dollarSignLabel.text = dollarSignText;
dollarSignLabel.textAlignment = NSTextAlignmentRight;
textField.leftView = dollarSignLabel;
textField.leftViewMode = UITextFieldViewModeAlways;
[self.view addSubview:textField];
虽然这种解决方案完善了美元符号标签(左视图)和文字之间的相对定位,它可能会增加美元符号标签的宽度的位(不超过1分),使相同的增加文本字段的宽度和以相同的量移位的所有文本到右侧。
我不推荐这种解决办法,如果文本字段的高度将发生变化,例如,由于自动布局(或自动尺寸)。
该解决方案支持您正在使用自动布局(或自动调整)来调整文本字段的高度。
// VVMAmountTextField.h
@import UIKit;
@interface VVMAmountTextField : UITextField
@end
// VVMAmountTextField.m
#import "VVMAmountTextField.h"
@implementation VVMAmountTextField
#pragma mark - UIView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
UIFont *font = [UIFont systemFontOfSize:15];
self.font = font;
self.keyboardType = UIKeyboardTypeDecimalPad;
self.placeholder = @"0.00";
// Set leftView to dollarSignLabel ($).
UILabel *dollarSignLabel = [[UILabel alloc] initWithFrame:CGRectZero];
dollarSignLabel.backgroundColor = [UIColor whiteColor];
dollarSignLabel.font = font;
dollarSignLabel.text = @"$";
self.leftView = dollarSignLabel;
self.leftViewMode = UITextFieldViewModeAlways;
}
return self;
}
#pragma mark - UITextField
// Override positioning to make things pixel perfect.
#define DOLLAR_SIGN_WIDTH() [((UILabel *)self.leftView).text sizeWithAttributes:@{NSFontAttributeName: self.font}].width
- (CGRect)textRectForBounds:(CGRect)bounds
{
bounds = [super textRectForBounds:bounds];
bounds.origin.x = DOLLAR_SIGN_WIDTH();
return bounds;
}
- (CGRect)editingRectForBounds:(CGRect)bounds
{
bounds = [super editingRectForBounds:bounds];
bounds.origin.x = DOLLAR_SIGN_WIDTH();
return bounds;
}
- (CGRect)leftViewRectForBounds:(CGRect)bounds
{
bounds.size.width = DOLLAR_SIGN_WIDTH();
return bounds;
}
@end
两种解决方案似乎运作良好。 解决方案1可能会导致移位,但有更少的代码,仍然看起来完美的像素。 我只想到的IT解决方案2.解决方案后2是典雅,并支持您使用的自动布局(或自动尺寸)来调整文本字段的高度。
不认为你可以做到这一点作为其一部分UITextField
孤独。
我可以的事情的一种方法是使你UITextField
无国界的,并保持一个UILabel
在左侧(但相邻) UITextField
。 最后,如果你想境界比把这些2个元素(的UITextField和的UILabel)一个UIView内,给边界这一观点。 此设置应该为你搭起了图像完全相同。
让我知道这是否正常工作了。
更新 :你可以做的@Anne点,但有文字跑对的UILabel顶部的风险。 我觉得我的建议是更好的。
要添加到安妮的答案。 你也可以把它一个UIImageView,并使用你想有任何图像。 有了一个UIImageView,你可以设置背景为白色,以便文本将它塞到下面。