2014-06-06 4 views
2

UITextField이 있는데, 사용자가 TextField을 터치하고 키보드를 들으면 프로그래밍 방식으로 오른쪽에 UIButton을 추가하려고합니다. 키보드가 제기되고있다UITextField의 너비를 변경할 수 없습니다.

------------------------------ 
|--------------------------- | 
||  textfield   | | 
|--------------------------- | 
------------------------------ 

:

------------------------------ 
|------------------   | 
||  textfield | BUTTON | 
|------------------   | 
------------------------------ 

I 인터페이스 건물에 대한 자동 레이아웃과 Storyboard를 사용하여 이러한 요소가 잘 연결되어 있습니다. 나는 UITextField의 폭을 변경하려고 때의 스크린 샷은 아래 그림과 같이

, 그것은는 Button을 넣어 "내부"텍스트 필드를 결과, 전혀 변경하지 않은 :

enter image description here

나는 스토리 보드를 통해 제약 조건을 설정 한

// code to add the button 
- (void)keyboardWasShown:(NSNotification*)aNotification 
{ 
    // dynamically add a "reply" button 
    button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [self.replyViewBox addSubview:button]; 
    [button setTitle:@"Reply" forState:UIControlStateNormal]; 
    // change button size & position 
    button.frame = CGRectMake(265.0, 10.0, 46.0, 30.0); 
// [button sizeToFit]; 
    // change replyText size 
    CGRect frameRct = replyText.frame; 
    frameRct.size.width = 248.0; 
    replyText.frame = frameRct; 

    [replyViewBox addSubview:button]; 

} 

그래서 나를 자동 레이아웃을 유지하면서 폭을 프로그래밍 방식으로 변경할 수 어쨌든이 : 여기 내 코드는?

+0

autolayout을 사용하고 있으므로 프레임이 아닌 제약 조건을 변경해야합니다. 여기 주제에 대한 괜찮은 대답이 있습니다 : http://stackoverflow.com/questions/15893022/setting-constraints-programatically – danh

+0

@danh thx 링크입니다. 그러나 TextField의 제약 조건을 제거한 후에도 여전히 폭을 변경할 수 없습니다. 왜? – dumbfingers

+0

자동 레이아웃을 사용 중지 했습니까? – danh

답변

1

나는 이것을 재미있게하려고 생각했다. 내가 한 일은 다음과 같습니다.

1) 텍스트 필드와 버튼에 대한 부모보기를 설정하고 텍스트 필드의 오른쪽 가장자리를 부모의 오른쪽 가장자리에서 일정 거리만큼 두도록 제약 조건을 만듭니다. 우리가에 대해 문의 할 수있는 방법을 추가)

@interface ViewController() 

@property (weak, nonatomic) IBOutlet UITextField *textField; 
@property (weak, nonatomic) IBOutlet UIButton *button; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *textHorizontalTrailConstraint; 

@end 

3 : 그 제약, 버튼 및 텍스트 뷰에 대한 출구를 만들기) 여기에서 강조 표시된 제약 ... enter image description here

2

를 참조하십시오 그 제약의 상태. 키보드 모드는 해당 제약 조건이 0이 아닌 상수를 가질 때 켜집니다.

- (BOOL)keyboardModeIsOn { 
    return self.textHorizontalTrailConstraint.constant > 0; 
} 

4) 마지막으로 제약 조건을 조정하고 bool을 기반으로 버튼 숨기기/숨김 해제 방법. 재미있게하려면 전환을 애니메이션으로 만들기 위해 선택적 bool을 추가했습니다. 키보드 알림에서 이것을 호출하십시오.

- (void)setKeyboardModeOn:(BOOL)on animated:(BOOL)animated { 

    if (on == [self keyboardModeIsOn]) return; 

    CGFloat htrailConst = (on)? 132 : 0; 
    CGFloat alpha = (on)? 1.0 : 0; 
    NSTimeInterval duration = (animated)? 0.5 : 0; 

    [self.view layoutIfNeeded]; 
    [UIView animateWithDuration:duration animations:^{ 
     self.textHorizontalTrailConstraint.constant = htrailConst; 
     self.button.alpha = alpha; 
     [self.view layoutIfNeeded]; 
    }]; 
} 

나는 이것을 테스트 한 결과 좋았다.

관련 문제