为什么我的IBAction更改标签文本不起作用?

时间:2012-04-01 01:26:01

标签: objective-c ios

我想在我的iOS应用中实现一个标签,当用户在文本字段中键入新字符时,该标签会将其值更改为文本字段的值。

因此,我在视图控制器中编写了这个IB动作。 listenerLabelUILabel IBOutlet,textInputUITextField IBOutlet。

- (IBAction)keyboardResponse:(id)sender
{
    listenerLabel.text = textInput.text;
}

然后我在头文件中声明了它。

- (IBAction)keyboardResponse:(id)sender;

之后,在我的xib文件中,我

  1. 从File的所有者拖动一行到两个UI元素并将它们与IBOutlets相关联。
  2. 按住Ctrl并单击UIBuilder中的文本字段,将其“值已更改”操作与IBAction keyboardResponse相关联。
  3. 但是,当我在iOS模拟器中运行应用程序时,标签的文本不会改变,因为我在文本字段中键入了字母。为什么不呢?

2 个答案:

答案 0 :(得分:3)

您需要使用通知执行此操作。假设您将这些插座正确连接到标签和文本字段,请执行以下操作:

在viewDidLoad中:

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
     selector:@selector(myTextChanged)
     name:UITextFieldTextDidChangeNotification 
     object:textInput];

添加此方法(您不需要那些IBActions

-(void)myTextChanged {
    self. listenerLabel.text = textInput.text;

}

作为附注 - 学会使用助理编辑器,它可以在连接IBActions或IBOutlet时消除错误,并在viewDidUnload中自动添加清理。

答案 1 :(得分:1)

我会使用为此而制作的UITextFieldDelegate方法。

  1. 让您的视图控制器采用此协议。即在你的.h文件中:

    @interface YourViewController : UIViewController <UITextFieldDelegate> {

  2. 在Interface Builder中,将delegate的{​​{1}}设置为视图控制器。

  3. 然后在.m文件中添加以下内容:(已编辑)

    textInput