Как я могу отправить символы в позицию курсора UISearchBar? - PullRequest
1 голос
/ 13 августа 2011

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

Есть ли у кого-нибудь полезный способчтобы сделать это?

Я нашел статью, объясняющую, как это сделать с помощью имитации операции «Вставить» (удалить содержимое картона, заменить моим персонажем, вставить в поле, вернуть оригинальное содержимое картона), ноМоя проблема в том, что я пытаюсь сделать это с помощью UISearchBar, который, похоже, не имеет селектора вставки.

Обновление

Я нашел отрывок:

UIKIT_CLASS_AVAILABLE(2_0) @interface UISearchBar : UIView { 
  @private
    UITextField            *_searchField;

Поскольку задокументировано, что в панели поиска есть UITextField, если бы мне нужно было пройтись через подпредставления панели поиска и найти упомянутое текстовое поле (при условии, что с уверенностью 99% в том, что у текстового поля есть делегат), имеет смыслЯ мог бы «украсть» текстовое поле и сделать мой класс делегатом, а затем переслать сообщения исходному делегату, как только я закончу с ними?

Ответы [ 2 ]

1 голос
/ 13 августа 2011
  • Это определенно сложно. UISearchBar не дает вам inputAccessoryView , и при этом вы не получаете selectedRange .

  • Вы можете вставить в UISearchBar. Если вы хотите, чтобы ваши хитрые персонажи попали на монтажную панель, вы можете воспользоваться кнопкой, чтобы выполнить что-то вроде:

    [[UIPasteboard generalPasteboard] setString:@"[*]"];
    

    и затем заставьте пользователя использовать вставку в UISearchBar. Довольно неудобно для пользователя.

  • Корректировка подпредставлений для поиска UITextField может работать. Если вы сделаете это, вам нужно будет взять существующего делегата и сделать себя делегатом. Тогда ваш делегат должен будет передавать сообщения. Процесс описан в этом вопросе и ответе на стекопоток . Потенциальные проблемы здесь: (a) реализация Apple может меняться между обновлениями iOS и даже, хотя и маловероятно, менять делегата в течение срока службы UISearchBar; (б) Apple может посчитать это использованием частного API и отклонить приложение. (У меня нет веских доказательств (б), но это что-то, чтобы рассмотреть.)

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

    [[self searchBar] setText: [NSString stringWithFormat:@"%@[*]", [[self searchBar] text]]].)
    
  • Реализация собственной панели поиска может быть лучшим способом, как уже предлагалось @hyperbole. Я сделал это успешно, добавив пользовательский UITextField (с моим собственным увеличительным стеклом в слот leftView и т. Д.) И добавив его в качестве titleView моей панели навигации. Но, если я правильно понимаю ваш вопрос, этого все равно будет недостаточно, поскольку UITextField не обеспечивает selectedRange , а его делегат не обеспечивает эквивалент textViewDidChangeSelection: . Вы можете попробовать UITextView, который привязан к одной строке (при необходимости прокрутка ограничена - часто кажется).

1 голос
/ 13 августа 2011

Разве вы не можете просто установить text из UISearchBar?Конечно, сложная часть заключается в определении позиции курсора.Для этого вы можете зарегистрировать UITapGestureRecognizer на UISearchBar, определить координаты касания и рассчитать положение курсора, используя - (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode или его варианты.

Возможно, вам также придется зарегистрировать UIPanGestureRecognizer, поскольку пользователь может изменить положение курсора, нажав, перетащив и отпустив палец.

HTH,

Акшай

...