UITextFieldに奇妙な問題があります。その値を@""に設定してから(または他の何かが原因で)、フィールドをゼロに縮小しています。次に縮小を解除すると、ビューのテキストを変更したかどうかに関係なく、縮小する前と同じ値が表示されます。フィールドに入力すると、グリッチはなくなりますが、見た目は悪くなります。
再現する完全なコード:
throwaway_testViewController.h:
#import <UIKit/UIKit.h>
@interface throwaway_testViewController : UIViewController <UITextFieldDelegate>{
UITextField * unitField;
}
@property (nonatomic, assign) IBOutlet UITextField * unitField;
-(IBAction)setEditingSectionUnits;
-(void)setEditingSectionValue;
-(IBAction)equalsPress;
@end
throwaway_testViewController.m
#import "throwaway_testViewController.h"
@implementation throwaway_testViewController
@synthesize unitField;
#pragma mark - Inputs
-(IBAction)equalsPress{
[UIView animateWithDuration:0.5 animations:^(void){
[unitField setText:@""];
[self setEditingSectionValue];
}];
}
#pragma mark Input Control
-(void)setEditingSectionUnits{
[UIView animateWithDuration:0.5 animations:^(void){
CGRect newRect = unitField.frame;
newRect.size.width = 160;
unitField.frame = newRect;
}completion:^(BOOL completed){
completed ? [unitField setNeedsDisplay] : nil;
}];
[unitField becomeFirstResponder];
}
-(void)setEditingSectionValue{
[UIView animateWithDuration:0.5 animations:^(void){
CGRect newRect = unitField.frame;
newRect.size.width = [unitField.text sizeWithFont:unitField.font constrainedToSize:CGSizeMake(80, 250)].width;;
unitField.frame = newRect;
}completion:^(BOOL completed){
completed ? [unitField setNeedsDisplay] : nil;
}];
[unitField resignFirstResponder];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[self setEditingSectionValue];
return TRUE;
}
-(void)textFieldDidBeginEditing:(UITextField *)textField{
[self setEditingSectionUnits];
}
@end
にxib
、にUITextField
関連付けを配置しunitField
、テキストフィールドのデリゲートをファイルの所有者に設定します。
UIButton
ラベルequalsPress
を付けてそれにIBAction
結び付け、編集と呼ばれる別のラベルをに結び付けsetEditingSectionUnits
ます。再現されたバグを確認するには:
- アプリを実行する
- 編集を押します
- テキストフィールドに何かを入力します(最小8〜10文字)
- キーボードのEnterキーを押します
- プレスequalsPress
- 編集を押します
- 表示されるはず:カーソルと空のテキストフィールド
- 実際に参照してください:最初にカーソルを置いて、最後に入力したものは何でも。
- 入力すると、このテキストは表示されなくなります。