WedX - журнал о программировании и компьютерных науках

Клавиатура не сбрасывается при касании за пределами UITextField

Я знаю, что это очень простая концепция, но по какой-то причине у меня возникают проблемы с закрытием клавиатуры, когда пользователь нажимает за пределами двух UITextField в моем контроллере представления. Я перепробовал столько решений на SO, сколько смог найти, и ни одно из них не работает, что говорит мне о том, что я каким-то образом их неправильно понимаю. Вот как я инициализирую UITextFields :

// Min Price
    //UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(-25, -76, 70, 30)];
    UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(10, 25, 70, 30)];

    tf.userInteractionEnabled = YES;
    tf.textColor = [UIColor blackColor];
    tf.font = [UIFont fontWithName:@"Helvetica-Neue" size:14];
    tf.backgroundColor=[UIColor whiteColor];
    tf.text= _minPrice;

    tf.textAlignment = NSTextAlignmentCenter;
    tf.layer.cornerRadius=8.0f;
    tf.layer.masksToBounds=YES;
    tf.layer.borderColor=[[UIColor lightGrayColor]CGColor];
    tf.layer.borderWidth= 1.0f;

    // Max Price
    UITextField *tf1 = [[UITextField alloc] initWithFrame:CGRectMake(125, 25, 70, 30)];
    tf1.userInteractionEnabled = YES;
    tf1.textColor = [UIColor blackColor];
    tf1.font = [UIFont fontWithName:@"Helvetica-Neue" size:14];
    tf1.backgroundColor=[UIColor whiteColor];
    tf1.text= _maxPrice;

    tf1.textAlignment = NSTextAlignmentCenter;
    tf1.layer.cornerRadius=8.0f;
    tf1.layer.masksToBounds=YES;
    tf1.layer.borderColor=[[UIColor lightGrayColor]CGColor];
    tf1.layer.borderWidth= 1.0f;

    //and so on adjust your view size according to your needs
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(70, 100, 200, 60)];

    [view addSubview:tf];
    [view addSubview:tf1];


    [self.view bringSubviewToFront: tf];
    [self.view bringSubviewToFront: tf1];

    [self.view addSubview:view];

и это функция, которую я использую, чтобы закрыть клавиатуру:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UIView * txt in self.view.subviews){
        if ([txt isKindOfClass:[UITextField class]] && [txt isFirstResponder]) {
            [txt resignFirstResponder];
        }
    }
}

  • К вашему сведению, вы можете заменить цикл в touchesBegan: на [self.view endEditing:TRUE]; 27.09.2014
  • Какой класс содержит метод touchesBegan:withEvent:? 27.09.2014
  • Вы пробовали это решение? 27.09.2014
  • @rebello95 Придирка - замените TRUE на YES. Используйте YES и NO для типов BOOL. 27.09.2014
  • вызывается ли функция touchesBegan:withEvent? Я не верю, что он будет вызываться, если ваш контроллер просмотра представляет собой прокрутку (просмотр таблицы). NSLog(@"hi mom"); в верхней части вашего метода и нажмите везде на экране и посмотрите, получится ли какой-либо результат. 27.09.2014

Ответы:


1

Вы смотрите только на прямые подвиды вашего представления; ваши текстовые поля находятся на другом уровне ниже (подвиды подвида вашего представления). Есть несколько способов исправить это. Проще всего пометить оба вида и просто получить их по тегу; вы также можете сохранить указатель на активное поле (или оба) и просто отклонить его/их.

27.09.2014
  • Понимаю. Не могли бы вы показать мне программно, как это будет сделано в данном случае? Я понимаю, что вы имеете в виду, но не знаю точного синтаксиса. 27.09.2014

  • 2

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

    27.09.2014

    3

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

        // Min Price
        UITextField *tf = [[UITextField alloc] initWithFrame:CGRectMake(10, 125, 70, 30)];
        [self.view addSubview:tf];
    
        tf.userInteractionEnabled = YES;
        tf.textColor = [UIColor blackColor];
        tf.font = [UIFont fontWithName:@"Helvetica-Neue" size:14];
        tf.backgroundColor=[UIColor whiteColor];
        tf.text= _minPrice;
    
        tf.textAlignment = NSTextAlignmentCenter;
        tf.layer.cornerRadius=8.0f;
        tf.layer.masksToBounds=YES;
        tf.layer.borderColor=[[UIColor lightGrayColor]CGColor];
        tf.layer.borderWidth= 1.0f;
    
        // Max Price
        UITextField *tf1 = [[UITextField alloc] initWithFrame:CGRectMake(125, 125, 70, 30)];
        [self.view addSubview:tf1];
    
        tf1.userInteractionEnabled = YES;
        tf1.textColor = [UIColor blackColor];
        tf1.font = [UIFont fontWithName:@"Helvetica-Neue" size:14];
        tf1.backgroundColor=[UIColor whiteColor];
        tf1.text= _maxPrice;
    
        tf1.textAlignment = NSTextAlignmentCenter;
        tf1.layer.cornerRadius=8.0f;
        tf1.layer.masksToBounds=YES;
        tf1.layer.borderColor=[[UIColor lightGrayColor]CGColor];
        tf1.layer.borderWidth= 1.0f;
    
    28.09.2014

    4
    1. щелкните кулаком по внешнему виду, вы берете размер кнопки для всего вида и нажмите на эту кнопку, напишите этот код.

      [self.view endEditing: YES];

    27.09.2014
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]