单击文本字段和按钮消失(它没有,但我希望它)

时间:2013-10-09 20:36:41

标签: uibutton uitextfield

我有一个文本字段和一个按钮。当我在文本字段内单击时,我希望按钮消失。我将文本字段定义为出口和操作(事件“退出时结束”)。在textfield的方法中,我有self.testButton.hidden = YES;当我在文本字段内单击时,按钮不会消失。相反,它一直持续到我按下键盘上的返回键 - 导致键盘消失。我在文本字段中尝试了与内部触摸相同的事情。单击文本字段时,按钮没有任何反应。

3 个答案:

答案 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