У меня странная проблема с 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
, а другой, называемый edit, привязанный к setEditingSectionUnits
. Чтобы увидеть воспроизведенную ошибку:
- Запустить приложение
- Нажмите изменить
- введите что-нибудь в текстовое поле (минимум 8-10 символов)
- нажмите клавишу ввода на клавиатуре
- нажмите равноПресс
- нажмите изменить
- Должны появиться: курсор и пустое текстовое поле
- На самом деле смотрите: все, что вы набрали последним, с курсором в начале.
- При наборе текста этот текст исчезает.