Первым ответчиком может быть любой экземпляр класса UIResponder, поэтому существуют другие классы, которые могут быть первым ответчиком, несмотря на UIViews. Например, UIViewController
также может быть первым респондентом.
В этой сущности вы найдете рекурсивный способ получения первого респондента, просматривая иерархию контроллеров начиная с rootViewController окон приложения.
Вы можете получить первого респондента, выполнив
- (void)foo
{
// Get the first responder
id firstResponder = [UIResponder firstResponder];
// Do whatever you want
[firstResponder resignFirstResponder];
}
Однако, если первый респондент не является подклассом UIView или UIViewController, этот подход завершится неудачей.
Чтобы решить эту проблему, мы можем использовать другой подход, создав категорию на UIResponder
и выполнив некоторое волшебство, чтобы иметь возможность собрать массив всех живых экземпляров этого класса. Затем, чтобы получить первого респондента, мы можем просто повторить и спросить каждый объект, если -isFirstResponder
.
Этот подход можно найти реализованным в этой другой сущности .
Надеюсь, это поможет.