Получить первый корреспондент в Задаче C - PullRequest
3 голосов
/ 07 января 2012

У меня возникают проблемы при попытке выяснить, какой UITextField является текущим первым ответчиком.

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

Я знаю, как настроить первый респондент, но просто не знаю, как определить, действительно ли поле стало первым респондентом.

Ответы [ 5 ]

25 голосов
/ 07 января 2012

[...] но просто не знаю, как определить, действительно ли поле стало первый ответчик.

UIView наследует метод isFirstResponder от UIResponder, который говорит вам об этом.

Самый простой способ найти того, кто первым отвечает, без проверки отдельных элементов управления / представлений и без нескольких методов для всех различных типов возможных первых респондентов, - это просто создать категорию на UIView, которая добавляет метод findFirstResponder :

UIView + FirstResponder.h

#import <UIKit/UIKit.h>

@interface UIView (FirstResponder)
- (UIView *)findFirstResponder;
@end

UIView + FirstResponder.m

#import "UIView+FirstResponder.h"

@implementation UIView (FirstResponder)

- (UIView *)findFirstResponder
{
    if ([self isFirstResponder])
        return self;

    for (UIView * subView in self.subviews) 
    {
        UIView * fr = [subView findFirstResponder];
        if (fr != nil)
            return fr;
    }

    return nil;
}

@end
4 голосов
/ 07 января 2012

Почему бы не использовать UITextFieldDelegate и реализовать метод textFieldDidBeginEditing:?Это будет вызвано, как только текстовое поле получит фокус.

Ссылка на протокол UITextFieldDelegate

3 голосов
/ 27 октября 2012
if(![myTextField isFirstResponder])
{
    // do stuff
}
1 голос
/ 10 февраля 2014

Я мог бы сделать так

Добавить свойство в ViewController

@property (nonatomic, strong) UITextField *firstRespondField;

Регистрация TextField Notificaiton

    [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(textFieldTextDidBeginEditing:)
                                               name:UITextFieldTextDidBeginEditingNotification
                                             object:nil];

  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(textFieldTextDidEndEdition:)
                                               name:UITextFieldTextDidEndEditingNotification
                                             object:nil];

Не забудьте удалить его на Dealloc

[[NSNotificationCenter defaultCenter] removeObserver:self];

Затем реализуем 2 метода

    - (void)textFieldTextDidBeginEditing:(NSNotification *)aNotification {

  self.firstRespondField = aNotification.object;

}

- (void)textFieldTextDidEndEdition:(NSNotification *)aNotification {

  self.firstRespondField = nil;

}

Наконец, я мог бы получить объект FirstResponder по

self.firstRespondField
0 голосов
/ 07 января 2012

Вы можете просто вызвать UIView.IsFirstResponder для представления, которое вы хотите знать, если это первый респондент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...