iphone设置UITextView委托打破自动完成

Posted

技术标签:

【中文标题】iphone设置UITextView委托打破自动完成【英文标题】:iphone setting UITextView delegate breaks auto completion 【发布时间】:2010-03-24 23:45:26 【问题描述】:

我有一个 UITextField,我想通过以下方式启用自动完成功能:

[self.textView setAutocorrectionType:UITextAutocorrectionTypeYes];

这正常工作,除非我给 UITextView 一个委托。设置委托后,自动完成将停止工作。委托只有以下方法:

- (void)textViewDidChange:(UITextView *)textView

 self.textView.text = [self.textView.text stringByReplacingOccurrencesOfString:@"\n" withString:@""];

 int left = LENGTH_MAX -[self.textView.text length];
 self.characterCountLabel.text = [NSString stringWithFormat:@"%i",abs(left)];


有谁知道如何同时启用自动完成和委托集?

谢谢!特里斯坦

【问题讨论】:

您可以详细说明为什么需要去掉 \n 字符吗? 嗨贾萨里恩。 textView 正在从用户那里获取消息,以类似于 twitter 的方式发布。它们应该不超过几句话,而且都在一行上。我想我可以在用户提交消息后简单地删除新行,但这并不理想。我希望有一种方法可以在不破坏其他功能的情况下使用标准委托方法。 【参考方案1】:

这可能会破坏自动完成功能,因为您同时修改了 UITextView 中的文本。

【讨论】:

【参考方案2】:
NSRange r= [self.textView.text rangeOfString:@"\n"];
if(r.location!=NSNotFound) //must check before replacing new lines right away, otherwise spellcheck gets broken

    self.textView.text = [self.textView.text stringByReplacingOccurrencesOfString:@"\n" withString:@""];

问题是由于每次更改文本时都可能修改文本(即调用替换方法)引起的。解决方案是仅在必要时调用 replace 方法。

【讨论】:

【参考方案3】:

得到这个:您需要做的就是从您的界面 (.h) 文件中删除 UITextViewDelegate。

您仍然可以将委托设置为 nib 中的 textView。

奇怪,对吧?为我工作,我希望它也能解决你的问题。

【讨论】:

以上是关于iphone设置UITextView委托打破自动完成的主要内容,如果未能解决你的问题,请参考以下文章

可变高度 UITextView

iphone 始终在 UITextView 中隐藏一些文本

tableHeaderView中的UITextView找不到委托

自动布局约束警告“将尝试通过打破约束来恢复”

UITableView 自动调整行约束在 iPhone 6Plus 上神秘地打破

UITextView 以编程方式调整大小,但随后设置为旧的故事板值。