2015-03-20 6 views
1

Если я копирую abc 123 и вставляю его в свой UITextField, я бы хотел ввести abc123. Я пытаюсь использовать shouldChangeCharactersInRange:replacementString от UITextFieldDelegate, но изменение аргумента replacementString не изменяет того, что на самом деле появляется в поле.Просеивание пробелов при вставке в UITextField?

Я могу вернуть NO, если строка содержит пробелы, но то, что я хотел бы сделать, это на самом деле разбить их в точке входа. По-видимому, для этого не существует другого метода делегата.

Как я могу достичь этого, предпочтительно без подкласса UITextField и переопределения paste:?

ответ

0

Вам необходимо удалить пробелы из replaceString, а затем установить свойство text UITextField на измененную заменуString и вернуть NO (потому что вы уже сделали это вручную).

2

Вы можете наблюдать UIPasteBoard изменения и изменить строку, прежде чем вставить:

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(pasteboardChangedNotification:) 

После того, как вы получите уведомление вы можете получить строку и заменить пробелы.

NSString *newString = [[[UIPasteboard generalPasteboard] string] stringByReplacingOccuranciesOfString:@" " withSting:@""]

+0

Это не будет работать, если текст не будет скопирован из моего приложения. Я фактически удаляю пробелы из скопированного нового пароля в электронном письме или в Safari, желая снять пробелы, которые могли быть подняты, когда клиент выделяет текст в браузере. – Luke

0

я мог бы достичь этого поведение переопределяет TextField: shouldChangeCharactersInRange: replacementString: внесения изменений внутри метода к TextField (набор текста на отформатированную версию) и возвращение NO.