【问题标题】:iphone setting UITextView delegate breaks auto completioniphone设置UITextView委托打破自动完成
【发布时间】: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 的方式发布。它们应该不超过几句话,而且都在一行上。我想我可以在用户提交消息后简单地删除新行,但这并不理想。我希望有一种方法可以在不破坏其他功能的情况下使用标准委托方法。

标签: iphone autocomplete delegates uitextview uitextviewdelegate


【解决方案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。

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

      【讨论】:

        猜你喜欢
        • 2021-08-29
        • 2019-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多