我的UIButton
设置为每次UITextField
完成编辑时都会消失,我调用textFieldDidEndEditing:
方法,然后让按钮逐渐消失。这很好,除非我切换到另一个文本字段而不点击第一个文本字段。例如,我在文本字段A上,只需点击文本字段B,键盘仍然保持不动,按钮也是如此。我不相信有一种方法可以覆盖像这样切换的文本字段,只有当所有文本字段都完成编辑时。我错了吗?这是我的代码:
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
{
negButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
negButton.frame = CGRectMake(textField.frame.origin.x, textField.frame.origin.y, 37, textField.frame.size.height);
[negButton setAlpha:0];
return YES;
}
-(void) textFieldDidBeginEditing:(UITextField *)textField
{
if ([textField isEditing])
{
[UIView animateWithDuration:0.3 animations:^
{
field = textField;
CGRect frame = textField.frame;
frame.size.width -= 40;
frame.origin.x += 40;
[negButton setAlpha:1];
[textField setFrame:frame];
[self.view addSubview:negButton];
}];
}
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
[UIView animateWithDuration:0.3 animations:^
{
CGRect frame = textField.frame;
frame.size.width += 40;
frame.origin.x -= 40;
[negButton setAlpha:0];
[textField setFrame:frame];
}
];
}
答案 0 :(得分:1)
听起来我正在调用按钮显示在
上textFieldShouldBeginEditing
方法,很好,你要在
上删除它textFieldDidEndEditing
方法,也没关系。当您切换到另一个文本框时,为什么没有看到按钮消失是因为当您点击该文本框时, endEditing 方法后立即调用 shouldBeginEditing 方法,结果在删除后立即重新出现的按钮。
这是应该工作的方式,如果你想让它以不同的方式工作,你必须使代码特定于每个文本字段
EX:
- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
{
if(textField == myField1)
{
//make button appear
}
else if(textField == myField2)
{
//Something else
}
}
瞧!
答案 1 :(得分:0)
这里的问题是调用委托方法的顺序。
假设您从textField1转到textField2。
一旦textField1处于活动状态并单击textField2,就会像这样调用它们:
textFieldShouldBeginEditing (textField2)
textFieldShouldEndEditing (textField1)
textFieldDidEndEditing (textField1)
textFieldDidBeginEditing (textField2)
您正在negButton
中创建新 textFieldShouldBeginEditing
,通过在textField2旁边创建一个并存储它来覆盖对“旧”按钮(在textField1旁边)的引用引用而不是。接下来,您在新按钮上调用textFieldDidEndEditing
和textFieldDidBeginEditing
。
您要做的是将当前位于textFieldShouldBeginEditing
的代码移动到textFieldDidBeginEditing
的开头,以便前两个方法在创建新方法之前对相应的按钮起作用。