如何在底部的文本字段内设置单行?

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 底部。