如何在底部的文本字段内设置单行?
How to set a single line inside textfield at the bottom?
这是我在文本字段类别中使用的代码:
该行仅在用户触摸文本字段时显示。
@implementation UITextField (textField)
-(void)textBottomLine:(UITextField *)textField
{
CALayer *border = [CALayer layer];
CGFloat borderWidth = 2;
border.borderColor = [UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, 4);
border.borderWidth = borderWidth;
[textField.layer addSublayer:border];
textField.layer.masksToBounds = YES;
}
但我一无所获,请任何人帮助我找出解决方案。
您需要创建自定义 TextField class 并在其中设置委托 class。像这样
.h 文件
@interface CustomTextField : UITextField<UITextFieldDelegate>
@propery(strong)CALayer *border;
@end
.m 文件
@implementation CustomTextField
@synthesis border;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.delegate = self;
}
return self;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
border = [CALayer layer];
CGFloat borderWidth = 2;
border.borderColor = [UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, 4);
border.borderWidth = borderWidth;
[textField.layer addSublayer:border];
textField.layer.masksToBounds = YES;
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
[border removeFromSuperlayer];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return YES;
}
@end
在任何需要文本字段的地方都可以使用:
CustomTexTField *textField = [[CustomTextField alloc] initWithFrame:customFrame];
[self.view addSubView:textField];
也许它会对你有所帮助。
您可以根据 Bhumika 对 UITextField
的 回答创建自定义 class,也可以使用如下类别。
我创建了类别UITextField+Extended
@interface UITextField (Extended)
-(void)addBottomLine;
-(void)removeBottomLine;
@end
在 .m 文件中
@implementation UITextField (Extended)
-(void)addBottomLine
{
CALayer *border = [CALayer layer];
CGFloat borderWidth = 2;
border.name = @"bottomLine";
border.borderColor = [UIColor redColor].CGColor;//[UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, self.frame.size.height - borderWidth, self.frame.size.width, 4);
border.borderWidth = borderWidth;
[self.layer addSublayer:border];
self.layer.masksToBounds = YES;
}
-(void)removeBottomLine
{
[[self.layer.sublayers copy] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
CALayer * subLayer = obj;
if(([[subLayer name] isEqualToString:@"bottomLine"])){
[subLayer removeFromSuperlayer];
}
}];
}
@end
并在您的视图控制器中简单导入 class 并使用委托将此方法调用到 add/remove 层。
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[txtTemp resignFirstResponder];
return YES;
}
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[txtTemp addBottomLine];
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
[txtTemp removeBottomLine];
}
希望对您有所帮助。
首先将您的 UITextField 放在 UIViewController 中。然后放置 UITextField 并转到的 select 是 Xcode 右侧的 属性,从那里你会找到控件,你可以看到对齐选项,还有两个选项 - >水平和垂直。在垂直方向你可以看到 select 一个你可以在屏幕截图中看到的。通过单击该选项,您的文本数据将显示在 UITextField 底部。
这是我在文本字段类别中使用的代码: 该行仅在用户触摸文本字段时显示。
@implementation UITextField (textField)
-(void)textBottomLine:(UITextField *)textField
{
CALayer *border = [CALayer layer];
CGFloat borderWidth = 2;
border.borderColor = [UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, 4);
border.borderWidth = borderWidth;
[textField.layer addSublayer:border];
textField.layer.masksToBounds = YES;
}
但我一无所获,请任何人帮助我找出解决方案。
您需要创建自定义 TextField class 并在其中设置委托 class。像这样
.h 文件
@interface CustomTextField : UITextField<UITextFieldDelegate>
@propery(strong)CALayer *border;
@end
.m 文件
@implementation CustomTextField
@synthesis border;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.delegate = self;
}
return self;
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
border = [CALayer layer];
CGFloat borderWidth = 2;
border.borderColor = [UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, textField.frame.size.height - borderWidth, textField.frame.size.width, 4);
border.borderWidth = borderWidth;
[textField.layer addSublayer:border];
textField.layer.masksToBounds = YES;
return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
return YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField{
[border removeFromSuperlayer];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
return YES;
}
@end
在任何需要文本字段的地方都可以使用:
CustomTexTField *textField = [[CustomTextField alloc] initWithFrame:customFrame];
[self.view addSubView:textField];
也许它会对你有所帮助。
您可以根据 Bhumika 对 UITextField
的 回答创建自定义 class,也可以使用如下类别。
我创建了类别UITextField+Extended
@interface UITextField (Extended)
-(void)addBottomLine;
-(void)removeBottomLine;
@end
在 .m 文件中
@implementation UITextField (Extended)
-(void)addBottomLine
{
CALayer *border = [CALayer layer];
CGFloat borderWidth = 2;
border.name = @"bottomLine";
border.borderColor = [UIColor redColor].CGColor;//[UIColor colorFromHexString:@"#ffc400"].CGColor;
border.frame = CGRectMake(0, self.frame.size.height - borderWidth, self.frame.size.width, 4);
border.borderWidth = borderWidth;
[self.layer addSublayer:border];
self.layer.masksToBounds = YES;
}
-(void)removeBottomLine
{
[[self.layer.sublayers copy] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
CALayer * subLayer = obj;
if(([[subLayer name] isEqualToString:@"bottomLine"])){
[subLayer removeFromSuperlayer];
}
}];
}
@end
并在您的视图控制器中简单导入 class 并使用委托将此方法调用到 add/remove 层。
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[txtTemp resignFirstResponder];
return YES;
}
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
[txtTemp addBottomLine];
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
[txtTemp removeBottomLine];
}
希望对您有所帮助。
首先将您的 UITextField 放在 UIViewController 中。然后放置 UITextField 并转到的 select 是 Xcode 右侧的 属性,从那里你会找到控件,你可以看到对齐选项,还有两个选项 - >水平和垂直。在垂直方向你可以看到 select 一个你可以在屏幕截图中看到的。通过单击该选项,您的文本数据将显示在 UITextField 底部。