iPhone - можно не показывать клавиатуру, но все же показывать курсор в UITextField? - PullRequest
5 голосов
/ 04 апреля 2010

У меня есть пользовательская клавиатура, которую я хочу показать, когда пользователь касается UITextField. Но в то же время я хочу показать курсор в текстовом поле. Если при возврате NO для canBecomeFirstResponder, он не показывает клавиатуру по умолчанию, но также не показывает курсор.

Может кто-нибудь помочь мне?

Спасибо.

Ответы [ 8 ]

5 голосов
/ 26 февраля 2011

Ответом на вашу проблему является создание представления для вашей пользовательской клавиатуры, а затем редактирование свойства inputView вашего UITextField и передача его для вашей пользовательской клавиатуры.

Надеюсь, это поможет.

4 голосов
/ 17 февраля 2015

переопределить следующие два метода в UITextFieldDelegate. Обратите внимание, что этот подход действителен для UITextField и UITextView (в этом случае вы переопределяете соответствующие методы в UITextViewDelegate)

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if (!textField.inputView) {
        //hides the keyboard, but still shows the cursor to allow user to view entire text, even if it exceeds the bounds of the textfield
        textField.inputView = [[UIView alloc] initWithFrame:CGRectZero];
    }
    return YES;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return NO;
}
4 голосов
/ 03 марта 2011

Похоже, что вы хотите, это UITextField с пользовательской клавиатурой. Создайте класс CustomKeyboard : UIView и добавьте кнопки / макет вида. Затем для вашего текстового поля просто установите для свойства inputView экземпляр класса CustomKeyboard textField.inputView = customKeyboard;. Вам также необходимо установить свойство inputView для чтения-записи @property (readwrite, retain) UIView *inputView; При установке свойства inputView стандартные клавиатуры iPhone не будут появляться, когда текстовое поле становится первым респондентом.

2 голосов
/ 18 мая 2010

Зарегистрируйтесь в качестве наблюдателя уведомлений клавиатуры (например, в контроллере представления, в котором вы хотите скрыть клавиатуру): -

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillShowNotification object:nil];

Поместить в hideKeyboard: функция: -

-(void)hideKeyboard:(NSNotification *)notification {

    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {
        for (UIView *keyboard in [keyboardWindow subviews]) {
            if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {

                keyboard.alpha = 0;
            }
        }
    }
}

(Спасибо luvieere в этой записи за то, что показал мне, как получить клавиатуру)

0 голосов
/ 12 ноября 2018

Я вижу два решения - либо создать собственную анимацию (и остановить, либо запустить ее в зависимости от состояния первого респондента текстового поля), либо поиграть со свойством inputView.

Вот решение для подхода inputView:

  1. Установите inputView свойство UITextField на пустое представление и попросите его стать первым респондентом. Это будет эффективно скрывать значение по умолчанию inputView (т.е. клавиатура), но будет продолжать отображать мигающий курсор.

  2. Добавить распознаватель жестов касания, и когда пользователь нажимает UITextField, задайте для свойства inputView пользовательскую клавиатуру, отклоните клавиатуру и попросите UITextField снова стать первым респондентом.

    class BlinkingTextFieldVC: UIViewController {
    
    var blinkingTextField: UITextField!
    
    override func onViewDidLoad() {
        setupView()
    }
    
    func setupView() {
        blinkingTextField = UITextField()
    
        blinkingTextField.inputView = UIView() // empty view will be shown as input method
        blinkingTextField.becomeFirstResponder()
    
        let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(blinkingTextFieldTapped(_:)))
        blinkingTextField.addGestureRecognizer(tapGuesture)
    }
    
    func blinkingTextFieldTapped(_ gesture: UITapGestureRecognizer) {
        if gesture.state == .ended {
            view.endEditing(true)
            blinkingTextField.inputView = nil // set your custom input view or nil for default keyboard
            blinkingTextField.becomeFirstResponder()
        }
    }
    
    }
    
0 голосов
/ 21 февраля 2011

Зачем вам вообще нужен курсор? Я думаю, что все, что вам нужно сделать, это когда пользователь нажимает клавишу на своей клавиатуре, вы можете обновить текстовое значение ввода.

0 голосов
/ 25 января 2011

Есть 2 решения вашей проблемы. 1) Установка альфа клавиатуры на 0 сделает клавиатуру невидимой ... это может быть все, что вы хотите. Появится курсор.

2) UITextField реализует протокол UITextInputTraits. Он всегда будет вызывать клавиатуру, когда станет первым респондентом. Вам нужно будет унаследовать его или другой класс, чтобы изменить поведение по умолчанию.

Удачи.

Если вы скажете нам, что вы пытаетесь достичь, мы можем предложить более элегантный способ сделать это.

Веселись.

0 голосов
/ 04 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...