Я пытаюсь скопировать содержимое в UILabel, но не скрывая клавиатуру, проблема в том, что когда я показываю меню копирования на этикетке, ярлык становится первым ответчиком, а клавиатура уходит в отставку, но я хочу сделать это, не скрывая клавиатура, есть ли способ сделать это?
[Objective-C] Редактировать UILabel без скрытия клавиатуры
Ответ 1
Это невозможно при UILabel
.
Для этого вам следует использовать UITextField
. Просто отключите редактирование.
Ответ 2
AFAIK, вы не можете этого сделать. Но я думаю, что для этого вы можете работать. Вместо того, чтобы не скрывать клавиатуру, почему бы не отслеживать текущее активное текстовое поле, а затем активировать его после нажатия пользователем copy
. Вы можете использовать UIPasteboardChangedNotification
, чтобы узнать, когда пользователь нажал copy
. Например:
self.lastActiveTextField = aTextField
-(void)pasteBoardDidChange:(NSNotification*)notif
{
[self.lastActiveTextField becomeFirstResponder];
}
Ответ 3
Я так думаю, что смотрю что-то вроде этого проекта.
UILabel с реализацией протокола UIKeyInput
Ответ 4
Я думаю, это невозможно, в любой момент может быть только один ответчик. Если клавиатура отображается из-за другого элемента пользовательского интерфейса, то при попытке скопировать содержимое из UILabel ОС должна перенести первого ответчика из другого элемента в UILabel, так как нет необходимости в клавиатуре для UILabel, клавиатура автоматически скроется, Таким образом, вы должны внести изменения в свои элементы, чтобы исправить эту проблему или использовать сторонние элементы пользовательского интерфейса, которые могут решить вашу проблему.
Ответ 5
У каждого компонента UIView есть метод, называемый: canBecomeFirstResponder. Он доступен только для чтения, но вы можете подклассифицировать объект UI и переопределить getter:
- (BOOL)canBecomeFirstResponder {
return false;
}
Я не тестировал, но если "стать первым ответчиком" является проблемой, это должно решить ее.