#swift #uitextview #swift3 #autonumber #sequential-number
#swift #uitextview #swift3 #автоматическая нумерация #последовательный номер
Вопрос:
Когда пользователь нажимает клавишу [Return], необходимо отобразить номер. Например, серийные номера [1,2 и т.д.] для каждой строки.Есть ли какой-нибудь способ сделать это?
Следующий код, который я попробовал
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
var textview_text_nssring = textView.text as NSString
// Add "1" when the user starts typing into the text field
if (range.location == 0 amp;amp; textView.text.isEmpty ) {
if text == "n" {
textView.text = "1."
let cursor = NSMakeRange(range.location 3, 0)
textView.selectedRange = cursor
return false
}
else {
textView.text = NSString(format: "1. %@", text) as String
}
}
return true
}
Комментарии:
1. Покажите нам, что вы попробовали.
2. Обновлено @NiravD. Спасибо
Ответ №1:
Объявите один Int
var для текущего номера строки и используйте его внутри shouldChangeTextIn range
таким образом.
var currentLine: Int = 1
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
// Add "1" when the user starts typing into the text field
if (textView.text.isEmpty amp;amp; !text.isEmpty) {
textView.text = "(currentLine). "
currentLine = 1
}
else {
if text.isEmpty {
if textView.text.characters.count >= 4 {
let str = textView.text.substring(from:textView.text.index(textView.text.endIndex, offsetBy: -4))
if str.hasPrefix("n") {
textView.text = String(textView.text.characters.dropLast(3))
currentLine -= 1
}
}
else if text.isEmpty amp;amp; textView.text.characters.count == 3 {
textView.text = String(textView.text.characters.dropLast(3))
currentLine = 1
}
}
else {
let str = textView.text.substring(from:textView.text.index(textView.text.endIndex, offsetBy: -1))
if str == "n" {
textView.text = "(textView.text!)(currentLine). "
currentLine = 1
}
}
}
return true
}
Комментарии:
1. Спасибо. Но этот код не обрабатывает пробел. Если мы нажмем пробел, даже увеличим число
2. @Lydia Проверьте отредактированный ответ на уменьшение номера строки при удалении.
3. Сработало отлично. Он также обрабатывает редактирование предыдущего текста
4. Добро пожаловать, приятель 🙂
5. Я использовал приведенный выше код, но он не работает для меня в Swift 5, только что получил первый (1. text) после того, как приращение не работает