Как скрыть курсор текстового поля на iPhone, когда клавиатура активна - PullRequest
4 голосов
/ 28 июля 2010

мы пытаемся это сделать для настроек пароля, чтобы курсор не был виден пользователю.

Ответы [ 4 ]

2 голосов
/ 28 июля 2010

Попробуйте установить свойство поля secureTextEntry до YES.

1 голос
/ 28 июля 2010

edit: , чтобы ответить на вопрос, хотя скрыть курсор проще всего, наложив UITextField на другой UITextField, где задний является первым респондентом, а передний действуетпо крайней мере получить фокус (используя -(void)textFieldDidBeginEditing:(UITextField *)textField и передавая фокус).В

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
                replacementString:(NSString *)string

примените замену к передней части UITextField точно, используя что-то вроде

front.text = [front.text stringByReplacingCharactersInRange:range withString:string];

Вы, вероятно, нарушите функциональность копирования и вставки таким образом.Кроме того, будьте очень осторожны с тем, что вы делаете в этих функциях делегатов.Ожидайте неожиданное.

Мой оригинальный ответ, в равной степени применимый:


Я не знаю, что означало бы в этом контексте «повышенная безопасность», но взгляните на

изменить символ безопасного пароля в uitextfield

Чтобы еще больше испортить пользовательский интерфейс и, возможно, добавить больше «безопасности», вы можете:

  • отключить функцию возврата, возвращая NO, если [string length] == 0
  • добавить 1+(arc4rand()%4) символов для каждого введенного символа (как видно в некоторых системах управления окнами)
  • добавить случайные символы вместо постоянного символа-заполнителя

но я должен сказать, что я действительно не вижу смысла во всем этом.

0 голосов
/ 08 марта 2013

У меня тоже была эта проблема. Я использовал решение, описанное здесь

Он заменяет UITextField на пользовательскую UILabel со следующими настройками:

  1. Переопределитьсвойства inputView и inputViewAccessory, позволяющие настроить отображение клавиатуры, когда метка становится первым респондентом.
  2. Чтобы метка реагировала на сенсорные события, переопределите метод isUserInteractionEnabled, чтобы всегда возвращать YES.Кроме того, переопределите метод touchesEnded, чтобы сделать метку первым респондентом при обнаружении касания.
  3. Переопределите метод canBecomeFirstResponder, чтобы всегда возвращать YES.Это позволит открыть окно ввода.
0 голосов
/ 13 августа 2010

Вы можете использовать фиктивное текстовое поле, которое скрыто, и использовать делегат textDidChage для TextField и использовать это значение для заполнения Маскированных Значений в фактическом поле Пароль.

В Интерфейсном Разработчике есть фиктивное текстовое поле, которое скрыто, поддерживайте IBOutlet для этого, скажем

IBOutlet UITextField * passwordField; IBOutlet UItextField * dummyField;

Также установите делегат для этого и напишите следующие методы делегата

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSString *dummyText = dummyField.text;
NSString *changedText = @"";
if(dummyField == textField)
{
    if([string length] == 0)
    {
        if([dummyText length] <= 1)
        {
            changedText = @"";
        }
        else
        {
            changedText = [NSString stringWithFormat:@"%@",[dummyText substringToIndex:[dummyText length] - 1]]; 
        }
    }
    else
    {
        changedText = [NSString stringWithFormat:@"%@%@",dummyText,string];
    }
    passwordField.text = changedText;
}
return YES; }

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if(passwordField == textField)
{
    [dummyField becomeFirstResponder];
    return NO;
}
return YES; }


- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES; }
...