UITextInput setMarkedText:selectedRange不工作? (不能!)

时间:2011-11-09 14:41:19

标签: iphone objective-c uitextview uitextinput

我想以编程方式设置标记文本,因为iOS5 UITextView和UITextField符合UITextInput,这应该是可能的,但由于某种原因,我总是将markedText设为nil。 :( 我在这里缺少什么?

这是我尝试过的没有成功的事情:

(虽然textview是firstResponder)

1.-当文字视图不包含文字时:

text:“”,selectedRange:{0,0},markedText:nil。

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

结果: text:“”,selectedRange:{0,0},markedText:nil。 (没有改变)


2.-当文本视图包含文本+一些标记文本时:

text:“AAA”,selectedRange = {0,3},末尾标有文字:“太阳” 然后我做:

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

结果: text:“AAA”,selectedRange:{0,3},markedText:nil; (标记的文字为零)


在这两种情况下,如setMarkedText:selectedRange:将当前标记的文本(如果有的话)设置为nil。

任何帮助都将受到高度赞赏:)

更新

由于标记文本的概念似乎不清楚,这里有一个解释:

在多阶段输入语言(例如日语)中,您可以输入常规文本(如英语)或输入标记文本(如日语)。

我在这里写了常规文字:regular text然后我写了标记文字 然后我写了标记文字,因此附加成つき

标记文本(蓝色框中的文本)表示过渡或中间输入阶段,因为它可以变成其他称为候选者的字符/单词。候选人出现在大盒子里。

此屏幕截图是在iPad中使用蓝牙键盘时拍摄的,但在编写日语时使用软件键盘时会得到类似的结果。

在撰写之前,textview是:

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 个答案:

答案 0 :(得分:6)

我的代码存在概念性问题。我可能只是忽略了一些小事,但我认为你的编程中只有一个简单的错误。

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中运行的代码中的问题。当我点击三个不同的按钮时,它运行完美,并更改了标记的文本。如果没有标记文本,则会附加并标记文本。

textUITextView的名称:

-(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

我希望这会对你有所帮助并且值得赏金。

答案 1 :(得分:0)

在设置内容(并标记文本)之前,您是否已将UITextField添加到视图中?