[Objective-C] Редактировать UILabel без скрытия клавиатуры

Я пытаюсь скопировать содержимое в UILabel, но не скрывая клавиатуру, проблема в том, что когда я показываю меню копирования на этикетке, ярлык становится первым ответчиком, а клавиатура уходит в отставку, но я хочу сделать это, не скрывая клавиатура, есть ли способ сделать это?

Ответ 1

Это невозможно при UILabel.

Для этого вам следует использовать UITextField. Просто отключите редактирование.

Ответ 2

AFAIK, вы не можете этого сделать. Но я думаю, что для этого вы можете работать. Вместо того, чтобы не скрывать клавиатуру, почему бы не отслеживать текущее активное текстовое поле, а затем активировать его после нажатия пользователем copy. Вы можете использовать UIPasteboardChangedNotification, чтобы узнать, когда пользователь нажал copy. Например:

self.lastActiveTextField = aTextField

-(void)pasteBoardDidChange:(NSNotification*)notif
{
     [self.lastActiveTextField becomeFirstResponder];
}

Ответ 4

Я думаю, это невозможно, в любой момент может быть только один ответчик. Если клавиатура отображается из-за другого элемента пользовательского интерфейса, то при попытке скопировать содержимое из UILabel ОС должна перенести первого ответчика из другого элемента в UILabel, так как нет необходимости в клавиатуре для UILabel, клавиатура автоматически скроется, Таким образом, вы должны внести изменения в свои элементы, чтобы исправить эту проблему или использовать сторонние элементы пользовательского интерфейса, которые могут решить вашу проблему.

Ответ 5

У каждого компонента UIView есть метод, называемый: canBecomeFirstResponder. Он доступен только для чтения, но вы можете подклассифицировать объект UI и переопределить getter:

- (BOOL)canBecomeFirstResponder {
    return false;
}

Я не тестировал, но если "стать первым ответчиком" является проблемой, это должно решить ее.