2010-01-26 2 views
3

Каков правильный способ выхода из строя текущего первого регистратора?Правильный (безопасный магазин приложений) способ уйти в отставку первого ответчика?

Я видел следующее: Цитирование через поля и вызов resignFirstResponder на каждом.

[[self textFieldForRow:0] resignFirstResponder]; 
[[self textFieldForRow:1] resignFirstResponder]; 
[[self textFieldForRow:2] resignFirstResponder]; 
[[self textFieldForRow:3] resignFirstResponder]; 

И это, который выглядит, как он звонит собственную функцию, это приложение магазин сейфа ?:

UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 
[firstResponder resignFirstResponder];  

Есть ли лучший способ?

Спасибо!

Комментарии: выглядит как второй метод использует частный апи и чье-то приложение было отклонено из-за этого: link

ответ

0

код вы там не вызывая никакой частной функции. То, что происходит:

//Gets the application window 
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow]; 
//Gets the first Responder View for the window 
UIView *firstResponder = [keyWindow performSelector:@selector(firstResponder)]; 
//Make the UView resign the first responder 
[firstResponder resignFirstResponder];  

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

Кроме того, есть лучший способ сделать то, что именно ?. Если вы говорите о получении UIView, который является firstResponder к keyWindow, вы могли бы сделать при создании UIView:

myView.tag = 100; 

и получить:

UIView *firstResponder = [self viewWithTag:100]; 
+0

я не вижу «firstResponder» определяется как свойство или метод в документации UIWindow? –

+0

UIWindow-> UIView-> UIResponder-> isFirstResponder (это цепочка наследования, ведущая к методу). Не забудьте посмотреть методы суперкласса ... –

+0

Вы правы, он не определен как метод в документации UIWindow, но он определен в UIResponder (унаследован). –

0

Мое предложение было бы реализовать hacky & медленная версия firstResponder самостоятельно в категории, а затем файл радара с просьбой добавить метод. Что-то вдоль этих линий:

- (id)my_FirstResponder 
    for view in [self subviews] 
     if [self isFirstResponder] 
      return self 
     return [self my_firstResponder] 
    return nil 

Использование performSelector: для вызова методы не в публичных заголовках, безусловно, основания для отказа, так что не делайте этого. О, и не забудьте использовать префикс (например, код выше) при добавлении категории, чтобы избежать конфликтов.

Смежные вопросы