gpt4 book ai didi

ios - 如何将 UILabel 放在 UITextField 的最后一个字符旁边?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:50 24 4
gpt4 key购买 nike

我正在尝试实现与 Facebook 的新状态字段相同的效果:在用户无法修改或选择的最后一个字符旁边放置一些内容(例如,标签:“with Joh Doe”)。

实现它的最佳方法是什么?

谢谢

尼克

Screenshot

最佳答案

一个更简单的解决方案是简单地使 TextView 中的最后 n 个字符不可编辑。然后让 TextView 根据需要处理移动和换行文本。我猜这就是 Facebook 正在做的,只是在最后加上一些属性文本。

在您的 ViewControllers.h 中,确保 viewController 符合 UITextViewDelegate,如下所示。

@interface ViewController : UIViewController <UITextViewDelegate>

然后在 viewDidLoad: 方法中,将 UITextView 的委托(delegate)设置为 ViewController。您还可以添加固定文本。

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

self.myTextView.delegate = self;
self.myTextView.text = " posted by Mike";
}

然后,我们将使用 shouldChangeCharactersInRange: 方法来防止用户编辑您要保留的末尾的文本。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
BOOL deleteKeyPressed = ([text length] == 0 && range.length > 0);

if( range.location > (textView.text.length - @" - posted by Mike".length) || (deleteKeyPressed && range.location > (textView.text.length - @" - posted by Mike".length)) )
{
return NO;
}
return YES;
}

我认为这应该可以帮助您入门并让您的生活更轻松,而不是找到最后一个文本的末尾,然后在末尾放置另一个 View ,如果没有足够的空间容纳它,则可能需要换行。

因此,为了防止用户选择“保留”文本,请将以下委托(delegate)方法添加到您的 ViewController 的 .m 中:

-(void) textViewDidChangeSelection:(UITextView *)textView
{
if( textView.selectedRange.location > (textView.text.length - @" - posted by Mike".length) )
{
[textView setSelectedRange:NSMakeRange((textView.text.length - @" - posted by Mike".length), 0 )];
}
}

如果用户选择所有文本并选择“剪切”或“粘贴”,您仍然需要处理,但这应该只是 shouldChangeTextInRange 中的另一个特例。我会让你想出一个 - 应该不难。肯定比尝试在另一个 TextView 中动态放置、调整和包装一个 TextView 要容易得多。

关于ios - 如何将 UILabel 放在 UITextField 的最后一个字符旁边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com