Что именно означает ответчик? - PullRequest
0 голосов
/ 12 октября 2010

Обычно мы используем resignFirstResponder, чтобы скрыть клавиатуру в приложениях для iphone. Например, когда мы используем UISearchBar, после того, как пользователь нажимает кнопку поиска, мы скрываем клавиатуру, реализуя функцию searchBarSearchButtonClicked следующим образом:

 -(void)searchBarSearchButtonClicked:(UISearchBar*)searchBar{   
        NSLog(@"Search Button Click, result should be show here"); 
        [searchBar setShowsCancelButton:NO animated:YES];
       [searchBar resignFirstResponder];    
        self.dictTableView.allowsSelection = YES;   
        self.dictTableView.scrollEnabled = YES;     
}

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

Почему это работает так? Мы не вызывали функцию, которая скрывает клавиатуру, мы просто установили searchBar в качестве первого респондента, почему система просто скрывает клавиатуру автоматически?

Может ли кто-нибудь объяснить механизм этого процесса?

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Objective-C работает, посылая сообщения объектам в виде селекторов, которые являются именами методов, принадлежащих целевому объекту. «Ответчик» - это объект, который будет отвечать на сообщение, отправленное событием пользовательского интерфейса.

Респонденты живут в иерархии, называемой цепочкой респондентов. Если респондент не может понять сообщение пользовательского интерфейса, он перенаправляет его следующему респонденту в цепочке вплоть до самого объекта приложения.

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

В этом прелесть высоко объектно-ориентированного API. Вам не нужно микроуправлять стандартным поведением. Сами объекты справляются с этим за вас. Если вы привыкли работать с более процедурным API, это может немного дезориентировать.

(Кроме того, в наши дни это старая шляпа, но это было офигенно в начале 90-х, когда Objective-C и NextStep были новаторскими технологиями. Тим Бернерс-Ли изобрел веб-браузер просто так, чтобы он есть повод купить кубик Next.)

0 голосов
/ 12 октября 2010

«Первый респондент» - это объект пользовательского интерфейса, который в настоящее время принимает события (события клавиатуры или касания).Объекты, которые ожидают ввода с клавиатуры (например, панель поиска), вызовут появление клавиатуры, когда они станут первым респондентом.

Когда вы говорите панели поиска перестать быть «первым респондентом» ([searchBar resignFirstResponder]), клавиатурабольше не нужен и уходит.

...