2015-07-19 1 views
1

У меня есть UITextField, в котором пользователь должен ввести предложение, которое мы укажем пользователю для ввода. Таким образом, предложение типа уже известно нам. В середине предложения пользователь должен тайно передать сообщение. Способ сделать это - набрав несколько букв уже известного предложения, а затем введите «&», а затем «Который из них», «&».Замена символа после каждого типа в UITextField?

Уловка - это момент, когда пользователь нажимает «&», независимо от того, что он набирает после этого, не следует отображать, вместо каждой буквы, которую он набирает после этого, следует заменить буквой в уже известном предложении.

Например:

String - Which city did I live in 2 years ago?

User types - Which city di&Deteroit&n 2 yea

UITextField should show - Which city did I live in 2 yea

Часть между двумя «&», по существу, ответ сам по себе, так что я не хочу, чтобы это было показано в текстовом поле.

Мой подход в настоящее время является:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    var addString = String(self.character[self.textLength]) 

    var start = textField.text.endIndex // Start at the string's end index as I only want the most recent character to be replaced 
    var end = textField.text.endIndex // Take the string's end index as I only want one character to be changes per type 
    var nextRange: Range<String.Index> = Range<String.Index>(start: start,end: end) 

    textField.text.stringByReplacingCharactersInRange(nextRange, withString: addString) 


    return true 
} 

Однако, это, кажется, не в настоящее время заменить любую букву. Просьба помочь, если кто-либо знает реализацию. Спасибо

+0

Из ваших данных примера ** ОЧЕНЬ ** неясно, что вы пытаетесь сделать, очень неясно - я понятия не имею, как вход и выход связаны каким-либо образом. Вы заменяете некоторые строки каким-то другим, опускаете что-то, вставляете что-то и тадаааа, что-то должно выходить. – luk2302

+0

HI @ luk2303, я надеюсь, что это лучше. Пожалуйста, не стесняйтесь сказать мне, если это все еще неясно. Прошу прощения или двусмысленность. – Mehul

+0

На самом деле это уточняет, позвольте мне немного скопировать;) – luk2302

ответ

2

Там вы идете - попробуйте!

let initialString = "my question to be answered" 
var inputString = NSString() 

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    inputString = inputString.stringByReplacingCharactersInRange(range, withString: string) 

    textField.text = inputString as String 
    var range = Range<String.Index>(start: (textField.text?.startIndex)!,end: (textField.text?.endIndex)!) 

    while true { 
     if let firstIndex = textField.text!.rangeOfString("&", options: [], range: range, locale: nil) { 
      range = Range<String.Index>(start: firstIndex.startIndex.successor(), end: (textField.text?.endIndex)!) 
      var endIndex : String.Index? 
      if let index = textField.text!.rangeOfString("&", options: [], range: range, locale: nil) { 
       endIndex = index.endIndex 
       range = Range<String.Index>(start: index.startIndex.successor(), end: (textField.text?.endIndex)!) 
      } else { 
       endIndex = textField.text?.endIndex 
      } 

      let relevantRange = Range(start: firstIndex.startIndex,end: endIndex!) 
      let repl = initialString.substringWithRange(relevantRange) 

      print("would replace the \(relevantRange) with \(repl)") 

      textField.text!.replaceRange(relevantRange, with: repl) 
     } else { 
      break 
     } 
    } 
    return false 
} 

Я думаю, что это в значительной степени именно то, что вы хотели плюс очень чистый, вы можете удалить или добавить & полуслове и все работает, как хотелось бы.

Пример вывода для ввода "&X&ghj&X&ui&X&.." будет

would replace the 0..<3 with my
would replace the 6..<9 with sti
would replace the 11..<14 with to

И отображается в текстовом поле текст «мой ghj STI щ к ..» (жирным шрифтом текст является один считывание от фактического вопроса и соответствует & X & секции ввода.)

Примечание : для быстрого 1 замените [] на nil.

+0

Я действительно восхищаюсь вашими усилиями. Только в тот момент, когда я вставляю этот код, возникает ошибка в первой строке while, пока выполняется истинный цикл, т.е. если пусть firstIndex = ... "Ошибка: не может вызвать rangOfString с аргументом list type (String, options: NSArray, range: Range , locale: nil) – Mehul

+0

@Mehul Хм, какая версия swift вы используете? Для меня это работает, я могу проверить его на симуляторе. – luk2302

+0

Версия 6.3.1 для Xcode – Mehul

 Смежные вопросы

  • Нет связанных вопросов^_^