在编辑时调整UITextField的大小

时间:2015-02-26 13:41:11

标签: ios objective-c uitextfield

我的视图中有一个UITextField,它有大小限制来布局它的位置。我想要发生的是UITextField在用户开始编辑字段时改变宽度。

我将视图控制器设置为字段的委托,并且我在此处使用委托方法

- (void)textFieldDidBeginEditing:(UITextField *)textField{
    NSLog(@"Search Field is being edited");

}

我需要知道的是,textField需要做些什么才能使宽度发生变化,因为我尝试过的所有东西都不起作用。

由于

3 个答案:

答案 0 :(得分:1)

您是否尝试过使用addTarget:action:forControlEvents? (下面我用Masonry在代码中设置约束)

某处:

UITextField *textField = [[UITextField alloc] init];
[textField setBackgroundColor:kBlackColor];
[textField setTextColor:kWhiteColor];
[textField setText:@"TEXT"];
[self.view addSubview:textField];
[textField addTarget:self action:@selector(textFieldDidChange:) UIControlEventEditingChanged];
[textField mas_makeConstraints:^(MASConstraintMaker *make) {
    make.centerX.equalTo(self.view.mas_centerX);
    make.centerY.equalTo(self.view.mas_centerY);
    make.width.equalTo(@100);
    make.height.equalTo(@20);
}];

- (void)textFieldDidChange:(UITextField *)textField
{
    CGSize size = [textField sizeThatFits:CGSizeMake(CGFLOAT_MAX, textField.frame.size.height)];
    CGFloat minimumWidth = MAX(100, size.width);

    [textField mas_updateConstraints:^(MASConstraintMaker *make) {
        make.width.equalTo(@(minimumWidth));
    }];

    [self.view layoutIfNeeded];
}

答案 1 :(得分:1)

您可以做的是为文本字段的宽度约束设置出口。 在下面的例子中,我假设它的名字是textFieldWidthConstraint

在您的textFieldDidBeginEditing:方法中添加以下内容:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    // no animation
    self.textFieldWidthConstraint.constant = newWidth;

    // animation
    [self.view layoutIfNeeded];
    [UIView animateWithDuration:0.3 animations:^
    {
        self.textFieldWidthConstraint.constant = newWidth;
        [self.view layoutIfNeeded];
    }
}

你可以为身高做同样的事情。

希望有所帮助,如果您需要更多帮助,请告诉我。

答案 2 :(得分:-1)

您可以使用.size并将其设置为CGSize您想要的任何内容。

更多信息:https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/c/tdef/CGSize