Почему мой IBAction не меняет текст метки? - PullRequest
3 голосов
/ 01 апреля 2012

Я хочу реализовать метку в моем приложении для iOS, которая меняет свое значение на значение текстового поля, когда пользователь вводит новый символ в текстовое поле.

Следовательно, я написал это действие IB в моем контроллере представления. listenerLabel - это UILabel IBOutlet, а textInput - это UITextField IBOutlet.

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

Затем я объявил это в своем заголовочном файле.

- (IBAction)keyboardResponse:(id)sender;

Впоследствии в моем xib-файле я

  1. перетащил линию от Владельца файла к двум элементам пользовательского интерфейса и связал их с IBOutlets.
  2. нажмите Ctrl и щелкните текстовое поле в UIBuilder, чтобы связать его действие «Значение изменено» с IBAction keyboardResponse.

Однако, когда я запускаю приложение в iOS Simulator, текст метки не меняется, когда я набираю буквы в текстовое поле. Почему нет?

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Вам нужно использовать уведомление, чтобы сделать это.Предполагая, что эти выходы правильно подключены как к метке, так и к текстовому полю, сделайте следующее:

в viewDidLoad:

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

Добавьте этот метод (вам не нужны эти IBActions

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

}

Как примечание - научитесь пользоваться помощником редактора, он устраняет ошибки при подключении IBActions или IBOutlets и автоматически добавляет очистку в viewDidUnload.

1 голос
/ 01 апреля 2012

Я бы использовал метод UITextFieldDelegate, который был сделан только для этого.

  1. Заставьте ваш контроллер представления принять этот протокол. т.е. в вашем .h файле:

    @interface YourViewController : UIViewController <UITextFieldDelegate> {

  2. В Интерфейсном Разработчике установите delegate из textInput для вашего контроллера представления.

  3. Затем в свой файл .m добавьте следующее: (РЕДАКТИРОВАНИЕ)

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
        if (textField == textInput) {
            listenerLabel.text  = [textField.text stringByReplacingCharactersInRange:range withString:string];;
        }
        // Note that if you don't want the characters to change in the textField 
        // you can return NO here:
        return YES;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...