0

特有の問題があります。幅280pxから始まる2つのUITextFieldを含むビューがあります。焦点を合わせて、ボタンを表示するために短くしてほしい-私は次のコードでそれを行っています:

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    CGRect revealButton = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 221, textField.frame.size.height);

    [UIView beginAnimations:nil context:nil];
    textField.frame = revealButton;
    [UIView commitAnimations];
    NSLog(@"%f",textField.frame.size.width);
}

編集が終了したら、元のフレームに戻る必要があります。

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    CGRect hideButton = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 280, textField.frame.size.height);

    [UIView beginAnimations:nil context:nil];
    textField.frame = hideButton;
    [UIView commitAnimations];
}

初めてテキストフィールドにフォーカスすると、完全に機能します。ただし、他の何かに焦点を合わせた後に最初のテキストフィールドに焦点を合わせる場合(たとえば、最初に最初のテキストフィールドに焦点を合わせ、2番目に焦点を合わせてから最初に焦点を合わせる場合、または最初に2番目に焦点を合わせてから最初に焦点を合わせる場合)、フレームを変更しないだけです。さらに不可解なのは、幅として221記録するという事実です。これは、画面に表示されません。さらに、この問題は2番目のテキストフィールドには当てはまりません。

何か案は?前もって感謝します...

4

1 に答える 1

1

奇妙なことに、まったく同じコードで2つのテキストフィールドを使用して簡単なテストを実行し、毎回機能しました。

テキストフィールドと接続を削除して再構築することをお勧めします。すべてのターゲットをクリーンアップして、再試行してください。

あなたのコメントに従って編集してください

自動レイアウトを使用している場合は、テキストフィールドのフレームを直接変更しないでください。UI要素の実際のフレームは、システムによって計算されます。

あなたの目的のために、私はすべてのテキストフィールドに幅の制約を設定することをお勧めします。幅の制約に加えて、両方ではなく、左または右の間隔の制約のみがあることを確認してください。アニメーション化するには、次のコードを使用します。

- (NSLayoutConstraint *)widthConstraintForView:(UIView *)view
{
    NSLayoutConstraint *widthConstraint = nil;

    for (NSLayoutConstraint *constraint in textField.constraints)
    {
        if (constraint.firstAttribute == NSLayoutAttributeWidth)
            widthConstraint = constraint;
    }

    return widthConstraint;
}

- (void)animateConstraint:(NSLayoutConstraint *)constraint toNewConstant:(float)newConstant withDuration:(float)duration
{
    [self.view layoutIfNeeded];
    [UIView animateWithDuration:duration animations:^{
        constraint.constant = newConstant;
        [self.view layoutIfNeeded];
    }];
}


- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    float newWidth = 221.0f;

    NSLayoutConstraint *widthConstraint = [self widthConstraintForView:textField];

    [self animateConstraint:widthConstraint toNewConstant:newWidth withDuration:0.5f];
}

- (void)textFieldDidEndEditing:(UITextField *)textField
{
    float newWidth = 280.0f;

    NSLayoutConstraint *widthConstraint = [self widthConstraintForView:textField];

    [self animateConstraint:widthConstraint toNewConstant:newWidth withDuration:0.5f];
}
于 2012-11-04T20:17:41.580 に答える