2016-10-10 6 views
0

Когда пользователь нажимает клавишу [Return], тогда вам нужно отобразить номер. Как серийные номера [1,2 и т. Д.] Для каждой строки. Есть ли способ сделать это?Как сделать автоматическую нумерацию в UITextview при нажатии клавиши возврата в swift

После кода я попытался

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 && 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 

} 
+0

Покажите нам, что вы попробовали. –

+0

@NiravD updated.thanks – Lydia

ответ

1

Объявить один Int вар для текущего номера строки и использовать его внутри 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 && !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 && 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 
} 
+0

Thank you.But этот код не обрабатывает backspace.If мы ударяем backspace даже увеличиваем число – Lydia

+0

@Lydia Проверьте отредактированный ответ для уменьшения номера строки при удалении. –

+0

Работал отлично. Он также обрабатывает редактирование предыдущего текста. – Lydia