我有一个文本字段和一个按钮。当我在文本字段内单击时,我希望按钮消失。我将文本字段定义为出口和操作(事件“退出时结束”)。在textfield的方法中,我有self.testButton.hidden = YES;当我在文本字段内单击时,按钮不会消失。相反,它一直持续到我按下键盘上的返回键 - 导致键盘消失。我在文本字段中尝试了与内部触摸相同的事情。单击文本字段时,按钮没有任何反应。
答案 0 :(得分:1)
使用委托机制,而不是使用目标 - 行动机制("在退出时结束"和"内部触摸")。使用委托机制。
首先,让您的课程符合UITextFieldDelegate协议。在* .h(标题)文件中添加以下内容:
// Here I'm assuming your class is inheriting from UIViewcontroller but it
// may be inheriting from some other class. The really important part here
// is: <UITextFieldDelegate>. That's how you make your class conform to that protocol
@interface THE_NAME_OF_YOUR_CLASS : UIViewController <UITextFieldDelegate>
第二次,实施-(void)textFieldDidBeginEditing:(UITextField *)textField
方法。此外,请记住将自己设置为代理:self.textField.delegate = self
。这样,每次用户开始编辑时都会调用该方法。在那个方法内部self.testButton.hidden = YES;
。在* .m(实现)文件中添加以下内容:
-(void)viewDidLoad {
// here I'm assuming you have a 'strong' reference to your text field.
// You're going to need one to set yourself as the delegate.
self.textField.delegate = self;
}
// This is one of the methods defined in the UITextFieldDelegate protocol
-(void)textFieldDidBeginEditing:(UITextField *)textField {
self.testButton.hidden = YES;
}
同样,要再次显示按钮,请实施- (void)textFieldDidEndEditing:(UITextField *)textField
方法。在里面取消隐藏你的按钮。同样,在* .m文件中添加以下内容:
// This is another method defined in the UITextFieldDelegate protocol
-(void)textFieldDidEndEditing:(UITextField *)textField {
self.testButton.hidden = NO;
}
虽然代表们一旦熟悉它们,对你来说可能是一个谜 你会发现他们很容易。这非常重要,因为iOS编程 很大程度上依赖于代表。
代表是&#34;通知&#34;基于&#34;好莱坞&#34;原则是:不要打电话给我们;我们打电话给你。 在您的情况下,包含UITextField的类有兴趣知道UITextField何时开始编辑以及何时结束编辑。但是你的班级不能成为&#34; polling&#34; (即不断询问)文本字段以查明状态是否发生了变化。相反,您使用文本字段注册您的类,它将是一个文本字段,它会在发生事件时通知您。这要归功于您实施的方法。
进一步阅读:protocols and delegates
希望这有帮助!
答案 1 :(得分:0)
在隐藏它之前,您是否确保testButton已设置其IBOutlet?
答案 2 :(得分:0)
如果您想在用户开始编辑文字字段时按钮消失,请尝试UIControlEventEditingDidBegin
。