cbo*_*orn 6 iphone uitextfield ios resignfirstresponder
我有一个控制UITextField的textColor的UIButton,我发现当我在UITextField上调用resignFirstResponder时,文本字段是第一个响应者时对textColor所做的任何更改都会丢失,并且颜色会恢复到之前的状态becomeFirstResponder.我正在寻找的行为是textColor应该保留为文本字段是第一响应者时选择的任何内容.
这是相关代码:
- (void)viewDidLoad {
[super viewDidLoad];
self.tf = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 120.0f, self.view.bounds.size.width, 70.0f)];
self.tf.delegate = self;
self.tf.text = @"black";
self.tf.font = [UIFont fontWithName:@"AvenirNext-DemiBold" size:48.0f];
self.tf.textColor = [UIColor blackColor];
[self.view addSubview:self.tf];
self.tf.textAlignment = UITextAlignmentCenter;
UIButton *b = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 220.0f, self.view.bounds.size.width, 20.0f)];
[b addTarget:self action:@selector(changeColor:) forControlEvents:UIControlEventTouchUpInside];
[b setTitle:@"Change color" forState:UIControlStateNormal];
[b setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
[self.view addSubview:b];
}
- (void)changeColor:(UIButton *)button {
if ([self.tf.textColor isEqual:[UIColor blackColor]]) {
self.tf.text = @"red";
self.tf.textColor = [UIColor redColor];
} else {
self.tf.text = @"black";
self.tf.textColor = [UIColor blackColor];
}
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,该行为由以下操作产生:
类似地,如果初始textColor为红色,则textField将恢复为红色.
我创建了一个示例项目,其中只包含产生此行为所需的功能(此处提供).提前致谢.
作为解决方法,您可以在按下按钮时将所选颜色存储在属性上并执行以下操作:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
textField.textColor = self.selectedColor;
return YES;
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
正如评论中所指出的,放置此解决方案的更好的地方似乎是textFieldDidEndEditing因为它处理字段之间的跳转:
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.textColor = self.selectedColor;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2467 次 |
| 最近记录: |