【问题标题】:iOS: Appending an uneditable string to the end of a UITextViewiOS:将不可编辑的字符串附加到 UITextView 的末尾
【发布时间】:2012-05-03 01:59:55
【问题描述】:

我想在 iOS 中重现类似于 Facebook“更新状态”视图的屏幕。

(此文本应可编辑)步行(此处过去的任何内容均不可编辑)- 在南纳拉宾海滩

用户应该能够在附加字符串的左侧输入/编辑文本。附加的字符串需要包裹在其父级中并且可以点击。

有人知道这是怎么做到的吗? (我最近也在 Viddy 应用中看到了它)。

会不会是一个不断增长的 UITextField,其 UIAttributedString 分成两行,在输入文本时更新其框架?

【问题讨论】:

    标签: ios uitextfield uitextview


    【解决方案1】:

    更新: 看起来您想要的是让用户将光标放在签名中,但不让她输入
    在这种情况下,你会想要使用它来代替

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
       NSInteger signatureLength=20;
       if(range.location>self.textView.text.length-signatureLength){
           return false;
       }
       else{
           return true;
       }
    }
    

    原文:

    你需要使用 UITextViewDelegate

    实现 - (void)textViewDidChangeSelection:(UITextView *)textView 方法,类似于:

    对于这个例子,我们假设签名长度是 20,这看起来像这样:

    -(void)textViewDidChangeSelection:(UITextView *)textView{
           NSInteger signatureLength=20;
           NSRange newSelection=self.textView.selectedRange;
           if(newSelection.location>self.textView.text.length-signatureLength){
               [self.textView setSelectedRange:NSMakeRange(self.textView.text.length-signatureLength, 0)];
           }
     }
    

    所以基本上每次选择(在这种情况下==光标)更改时都会截获,如果光标将位于签名的中间,则在之前重新定位它。 设置长度为 0 的选择只会改变光标位置。

    【讨论】:

    • 只是一个精度,假设您使用签名字符串初始化 textview,并且在这种情况下签名长度为 20 个字符。
    • 使用这种方法,您将如何格式化和使签名字符串可点击?
    • 什么意思?可点击,因为您希望光标在其中闪烁?但只是不可编辑?然后你应该使用 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 代替,让我用该信息编辑我的答案
    • 可点击是指可点击,例如就像 Facebook 应用程序一样,当您选择一个地点时,它会添加到连字符的右侧并且不可编辑,但您可以点击它来更改它。
    • 嗨 JP,textViewDidChangeSelection 是在正确的轨道上。签名将是动态的(这应该不是问题)。我只需要能够对其进行格式化并使其像 uibutton 一样可点击
    猜你喜欢
    • 2022-12-11
    • 2017-10-13
    • 2020-08-19
    • 2014-03-06
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2013-10-17
    相关资源
    最近更新 更多