2015-09-24 1 views
0

Этот код я использовал внутри текстового поля: Эта строка отображается, когда пользователи касаются текстового поля.Как установить одну строку внутри текстового поля внизу?

@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; 
     } 

но ничего у меня нет, пожалуйста, помогите мне найти решение.

ответ

2

необходимо создать собственный класс TextField, а также задать делегат в этом классе. Как это

.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]; 

Может быть это Вам поможет.

+0

как добавить этот код в файле категории @Bhumika –

+0

Я не понимаю, какой файл вашего рассказываете – BHUMICA

+0

Чтобы избежать добавления этого кода в каждом экране, я хотел заявить о своей внутри поля категории .. –

1

Вы можете создать собственный класс согласно Bhumika's ответ на UITextField, а также использовать категорию, как показано ниже.

Я создал категорию UITextField+Extended

@interface UITextField (Extended) 
-(void)addBottomLine; 
-(void)removeBottomLine; 
@end 

в файл

@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 

и на ваш взгляд контроллера простого класса импорта и вызвать этот метод, чтобы добавить/удалить слой с помощью делегата.

-(BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    [txtTemp resignFirstResponder]; 
    return YES; 
} 
-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [txtTemp addBottomLine]; 
} 
-(void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    [txtTemp removeBottomLine]; 
} 

Надеюсь, это вам поможет.

0

Сначала разместите свой UITextField в UIViewController. Затем выберите расположенный UITextField и перейдите в свойство справа от Xcode, оттуда вы найдете элемент управления, в котором вы можете увидеть параметр выравнивания, в котором есть еще две опции -> Горизонтальная и вертикальная. В вертикали вы можете выбрать выделение, которое вы можете увидеть на экране. Нажав на эту опцию, ваши текстовые данные будут отображаться в нижней части UITextField.

In this image you can see Control->Alignment->Vetical->third option

Смежные вопросы