UITextInput setMarkedText: selectedRange не работает? (Не может быть!) - PullRequest
6 голосов
/ 09 ноября 2011

Я хочу установить помеченный текст программно, и поскольку iOS5 UITextView и UITextField соответствуют UITextInput, это должно быть возможно, но по какой-то причине я всегда получаю значение markedText равным нулю. :( Что мне здесь не хватает?

Это то, что я пытался без успеха:

(пока textview - первый ответчик)

1.- Когда текстовое представление не содержит текста:

text: "", selectedRange: {0,0}, отмеченный текст: ноль.

[_textView setMarkedText:@"月" selectedRange:NSMakeRange(0, 1)];

Результат: text: "", selectedRange: {0,0}, отмеченный текст: ноль. (Ничего не изменилось)


2.- Когда текстовое представление содержит текст + некоторый помеченный текст:

текст: «AAA», selectedRange = {0,3}, отмеченный текст в конце: «太陽» тогда я делаю:

[_textView setMarkedText:@"地" selectedRange:NSMakeRange(0,3)];

Результат: текст: «AAA», selectedRange: {0,3}, отмеченный текст: ноль; (отмеченный текст стал нулем)


В обоих случаях все равно, что setMarkedText:selectedRange: будет устанавливать текущий помеченный текст (если есть) на ноль.

Любая помощь будет высоко ценится:)

UPDATE

Поскольку концепция помеченного текста кажется неясной, вот объяснение:

В многоэтапных языках ввода (например, японском) вы можете вводить обычный текст (например, английский) или вводить помеченный текст (например, японский).

Здесь я написал обычный текст: regular text Затем я написал помеченный текст а затем я написал помеченный текст , поэтому он был добавлен в つき

Помеченный текст (текст в синем поле) представляет собой переходный или промежуточный этап ввода, поскольку он может превращаться в другие символы / слова, называемые кандидатами. Кандидаты показаны в большой коробке.

Этот снимок экрана был сделан при использовании Bluetooth-клавиатуры в iPad, но вы получите аналогичные результаты при использовании программной клавиатуры, например, при написании японского.

Перед написанием текстовое представление было:

textView.text : "regular text"
textView.selectedRange : {12,0}
textView.markedText:nil

Затем я написал и текстовый вид стал:

textView.text : "regular textつ"
textView.selectedRange : {13,0}
textView.markedText: "つ"

Затем я написал , и текстовый вид стал:

textView.text : "regular textつき"
textView.selectedRange : {14,0}
textView.markedText: "つき"

Каково текущее состояние текстового представления.

Я хочу иметь возможность устанавливать помеченный текст программно:)

Возможно ли это? - Согласно документам UITextInput это.

enter image description here

Ответы [ 2 ]

6 голосов
/ 26 ноября 2011

У меня есть концептуальная проблема с вашим кодом здесь. Возможно, я просто упускаю из виду какую-то мелочь, но я думаю, что у вас просто ошибка в программировании

1) Когда текстовое представление не содержит текста: text: "", selectedRange : {0,0}, markedText: nil:

[_textView setMarkedText:@"月" selectedRange:NSMakeRange(0, 1)];

Result: text: "", selectedRange: {0,0}, markedText: nil. 

(ничего не изменилось)

2) Когда текстовое представление содержит текст + некоторый помеченный текст: text: "AAA", selectedRange: {0,3}, markedText в конце: "太陽", тогда я делаю:

[_textView setMarkedText:@"地" selectedRangeNSMakeRange(0,3)];

Result: text: "AAA", selectedRange: {0,3}, markedText: nil; 

(отмеченный текст стал нулем)

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

text - это имя UITextView:

-(IBAction)first
{
    [text setMarkedText:@"test" selectedRange:NSMakeRange(0, 4)];
}
-(IBAction)second
{
    [text setMarkedText:@"woo" selectedRange:NSMakeRange(0,4)];
}

Здесь я нажал «Первый» When First is Clicked

Здесь я нажал "Второй" When Second is Clicked

Надеюсь, это поможет вам и заслуживает награды.

0 голосов
/ 20 ноября 2011

Вы добавили UITextField в представление перед настройкой его содержимого (и маркировкой текста)?

...