очистка ввода текста на основе того, что находится в текстовом поле - PullRequest
0 голосов
/ 15 сентября 2018

У меня есть текстовое поле (amount.text), в которое пользователи могут вводить числа. После того, как пользователь коснулся текстового поля, я запустил эту функцию, чтобы увидеть, нет ли у пользователя текста или просто символа $, который я добавляю в некоторый текст-заполнитель.

func textFieldDidEndEditing(_ textField: UITextField) {
    switch(textField.tag){
    case 1:
        if(name.text == "")
        {
            name.text = "Statement Name"
        }
        break
    case 2:
        if(amount.text == "" || amount.text == "$")
        {
            amount.text = amountPlaceHolder
        }
        else
        {
         code....
        }
}

Это было легко, когда единственным символом валюты в приложении был символ $. С обновлением я работаю над тем, чтобы позволить пользователям выбирать свои собственные валюты. Я не уверен, как я могу проверить, есть ли какие-либо числа в области ввода и не отображается ли текст заполнителя. Я пытался использовать символ валюты для проверки, но некоторые из них - просто буквы.

Например. Допустим, пользователь выбирает китайский юань, и символом, который я получил за это, является CY ¥. Так что, если они вводят 100, и это преобразуется в CY ¥ 100, а затем они удаляют 100 и ¥, как я могу проверить, есть ли числа еще там. Моей первоначальной мыслью было сравнить с символом валюты, но если они могут удалить часть символа, в данном случае ¥, то как я могу проверить это?

if(amount.text == "" || amount.text == currancy symbol)
        {
            amount.text = amountPlaceHolder
        }

Там, где действительный символ - CY ¥, но теоретически я бы проверял только CY.

CY¥ == CY -> will not use place holder text.

Я надеялся, что у кого-то может быть идея или направление, чтобы указать мне.

1 Ответ

0 голосов
/ 15 сентября 2018

Изменить эту строку:

if(amount.text == "" || amount.text == "$")

К этому:

if ["", "$", "€", "¥"].contains(amount.text!) 

Вы можете определить массив распознанных валют:

let currencyStrings = ["$", "€", "¥"] 

и используйте его так:

if currencyStrings.contains(amount.text!) || amount.text!.isEmpty

Что касается заполнителя, используйте свойство placeholder при создании текстового поля (а не в textFieldDidEndEditing):

amount.placeholder = amountPlaceHolder

(То же самое относится к текстовому полю name)


Бонус 1

Чтобы получить все коды и символы валют, вы можете использовать этот фрагмент:

let formatter = NumberFormatter()
let currencies: Set<String> = Set(Locale.availableIdentifiers
    .map { Locale(identifier: $0) }
    .reduce(Set<String>(), { set, locale in
        var tempo = set
        formatter.locale = locale
        if let code = formatter.currencyCode {
            tempo.insert(code)
        }
        if let symbol = formatter.currencySymbol {
            tempo.insert(symbol)
        }
        return tempo
}))

Примите во внимание, что этот набор содержит этот символ ¤, который обозначает неопределенная валюта . Я не смог получить символ валюты для этих двух локалей: kea_CV и pt_CV.


Бонус 2

Вот еще один массив кодов и символов для общих / активных криптовалют :

let crypto = ["BTC", "XBT", "₿", "LTC", "Ł", "NMC", "STC", "BCN", "PPC", "DOGE", "XDG", "Ð", "FTC", "₣", "GRC", "XPM", "XRP", "NXT", "AUR", "KOI", "COYE", "DASH", "NEO", "MZC", "XMR", "XEM", "POT", "AMP", "TIT", "XVG", "XLM", "VTC", "ETH", "ETC", "USDT", "NEU", "DCR", "LSK", "WAVES", "ZEC", "BCC", "BCH", "EOS", "ADA"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...