2009-11-29 2 views
2

필드에 추가 된 문자열을위한 공간을 만들기 위해 범위 크기를 "자동으로"조정하고 싶은 UITextField가 있습니다. 그러나, 나는 그것을 특정 양의 너비의면에서 최대로하고 싶습니다. 이 일을 할 수있는 가장 좋은 방법은 무엇입니까?UITextField를 특정 길이로 늘림

도움 주셔서 감사합니다.

편집 :

TestingView.h

#import <UIKit/UIKit.h> 


@interface TestingView : UIView <UITextFieldDelegate> { 

} 

@end 

당신이 sizeWithFont:constrainedToSize:를 사용하여 UITextField의 텍스트 크기를 측정해야 textField:shouldChangeCharactersInRange:replacementString: 위임 방법에 TestingView.m

#import "TestingView.h" 


@implementation TestingView 

- (void)awakeFromNib 
{ 
    CGRect testingBounds = self.bounds; 

    testingBounds.size.width = testingBounds.size.width - 20; 

    testingBounds.size.height = 30; 

    CGPoint testingCenter = self.center; 

    testingCenter.y = testingCenter.y - 75; 

    UITextField *testingField = [[UITextField alloc] initWithFrame:testingBounds]; 

    testingField.center = testingCenter; 

    testingField.delegate = self; 

    testingField.placeholder = @"Testing"; 

    [self addSubview:testingField]; 
} 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    int yourMaxWidth = 150; 

    float width = [textField.text sizeWithFont: 
        [UIFont systemFontOfSize: 14] 
           constrainedToSize: 
        CGSizeMake(yourMaxWidth, textField.bounds.size.height)].width; 

    textField.bounds = CGRectMake(textField.bounds.origin.x, 
             textField.bounds.origin.y, 
             width, 
             textField.bounds.size.height); 

    return YES; 
} 
@end 
+0

당신이 그것을 자동 크기 조정 및 텍스트 필드 주위에 약간의 융통성있는 공간을 추가하려고 했습니까? –

답변

4

CGSize의 width 매개 변수를 s에 반환합니다. 너 UITextField의 경계 너비.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    float width = [yourTextField.text sizeWithFont: 
      [UIFont systemFontOfSize: 14] 
             constrainedToSize: 
      CGSizeMake(yourMaxWidth, yourTextField.bounds.size.height)].width; 

    yourTextField.bounds = CGRectMake(yourTextField.bounds.origin.x, 
             yourTextField.bounds.origin.y, 
             width, 
             yourTextField.bounds.size.height); 
} 
+0

안녕하세요. 귀하의 조언에 감사드립니다! 불행하게도, 그것은 양쪽에서 확장하는 것처럼 보입니다. 그리고 왼쪽의 텍스트 부분을 무작위로 잘라내는 것처럼 보입니다. 이 문제를 해결할 수있는 방법이 있습니까? – PF1

+0

'yourTextField.bounds.origin.x' 대신 경계 대신 프레임을 설정해보십시오. 고정 값을 넣으십시오. 내일 나 자신을 시험해 볼 것이고, 내가 말한 것이 효과가 없다면 좀 더 시험해 보겠다. – luvieere

+0

luvieere : 귀하의 조언에 다시 한 번 감사드립니다. 그러나이를 프레임에 설정하고 중심점의 설정 값으로 변경하는 것은 그다지 도움이되지 않습니다. 너무 넓어지면 여전히 움직이거나 사라지는 이상한 문제가 있습니다. – PF1

0

왜 당신은 말할 수 없다 :

if (yourTextField.frame.size.width > self.frame.size.width) { 

     yourtextField.frame.size.width = yourtextField.frame.size.width; 

} 
+0

안녕하세요 Jaba :이 코드의 문제는 텍스트 필드 너비가 원래 크기로 유지되고 자랄 때 너비가 자동으로 확장된다는 것입니다. 따라서 사용자는 텍스트를 직접 클릭하면 편집 할 수 있습니다 (확장 된 프레임이 아님). – PF1