gpt4 book ai didi

ios - 如何在 UITextView 中的每一行添加无序列表或项目符号点

转载 作者:搜寻专家 更新时间:2023-10-31 22:08:47 25 4
gpt4 key购买 nike

基本上我想向 UITextView 添加一个无序列表。对于另一个 UITextView,我想添加一个有序列表。

我尝试使用这段代码,但它只在用户第一次按下 enter 后给了我一个要点,(仅此而已,)我什至不能退格。

- (void)textViewDidChange:(UITextView *)textView
{
if ([myTextField.text isEqualToString:@"\n"]) {
NSString *bullet = @"\u2022";
myTextField.text = [myTextField.text stringByAppendingString:bullet];
}
}

如果您只找到一种使用 Swift 执行它的方法,那么请随意发布代码的 Swift 版本。

最佳答案

问题是你正在使用

if ([myTextField.text isEqualToString:@"\n"]) {

作为您的条件,因此如果您的整个 myTextField.text 等于“\n”,该 block 就会执行。但是,如果您没有输入任何内容“\n”,则整个myTextField.text 只等于“\n”。这就是为什么现在这段代码只在“用户第一次按下回车键时”起作用;当您说“我什至无法退格”时,问题实际上是通过调用 textViewDidChange:重新添加,因为相同的条件仍在满足。

我建议在这种情况下使用 shouldChangeTextInRange: 而不是使用 textViewDidChange:,这样您就可以知道替换文本是什么,无论它在 UITextView< 中的位置如何 文本字符串。通过使用这种方法,即使在文本 block 的中间输入换行符,你也可以自动插入项目符号点...例如,如果用户决定输入一堆信息,然后跳回几行输入更多信息,然后尝试在两者之间按换行符,以下应该仍然有效。这是我的建议:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

// If the replacement text is "\n" and the
// text view is the one you want bullet points
// for
if ([text isEqualToString:@"\n"]) {

// If the replacement text is being added to the end of the
// text view, i.e. the new index is the length of the old
// text view's text...
if (range.location == textView.text.length) {
// Simply add the newline and bullet point to the end
NSString *updatedText = [textView.text stringByAppendingString:@"\n\u2022 "];
[textView setText:updatedText];
}

// Else if the replacement text is being added in the middle of
// the text view's text...
else {

// Get the replacement range of the UITextView
UITextPosition *beginning = textView.beginningOfDocument;
UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];

// Insert that newline character *and* a bullet point
// at the point at which the user inputted just the
// newline character
[textView replaceRange:textRange withText:@"\n\u2022 "];

// Update the cursor position accordingly
NSRange cursor = NSMakeRange(range.location + @"\n\u2022 ".length, 0);
textView.selectedRange = cursor;

}
// Then return "NO, don't change the characters in range" since
// you've just done the work already
return NO;
}

// Else return yes
return YES;
}

关于ios - 如何在 UITextView 中的每一行添加无序列表或项目符号点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304655/

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