Основываясь на предложении @Markus Müller, вот образец, который вы можете скопировать:
- (BOOL)becomeFirstResponder
{
// starts listening for UIMenuControllerDidHideMenuNotification & triggers resignFirstResponder if received
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resignFirstResponder) name:UIMenuControllerDidHideMenuNotification object:nil];
return [super becomeFirstResponder];
}
- (BOOL)resignFirstResponder
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIMenuControllerDidHideMenuNotification object:nil];
// your custom cleanup code here (e.g. deselection)
return [super resignFirstResponder];
}
В моем случае у меня есть сотни выбираемых объектов, поэтому я не хотел их все соблюдая это уведомление все время!То, что этот шаблон начинает наблюдать, когда он получает firstResponder, вызывает resignFirstResponder
, когда меню закрывается, и заканчивает наблюдение в том же самом.
В моем моем случае (как в OP), поскольку элемент не редактируетсядля меня желательно позвонить resignFirstResponder
, когда меню закрыто.Таким образом, resignFirstResponder
вызывается, если они выбирают один из пунктов меню или нет, поэтому код очистки всегда срабатывает.