Текст заполнителя для UITextView смешанного с первым ответчиком - PullRequest
0 голосов
/ 27 июня 2018

В настоящее время у меня есть текстовое представление с текстом заполнителя, которое исчезает всякий раз, когда пользователь нажимает на текстовое представление, и текст в текстовом представлении появляется всякий раз, когда первый респондент уходит в отставку, если текстовое представление пусто. (Вот код, который я использую для этого на случай, если кто-то захочет его использовать)

* Примечание. Сначала установите цвет текста в текстовом представлении на светло-серый и установите текст-заполнитель. Затем используйте эти методы:

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    //If it begins editing, then set the color to black
    if (textView.tag == 0){
        textView.text = ""
        textView.textColor = .black
        textView.tag = 1
    }
    return true
}


func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Example: I started my career as a street wear model based in Maryland. After 3 years of working with some of the top companies there, I moved to LA, where I currently reside. I’ve been featured in shows, 12 magazines, commercials, and a number of music videos. Now, Im currently looking to continue working with clothing companies and campaigns."
        textView.textColor = .lightGray
        textView.tag = 0
    }
}

Я хотел подняться на ступеньку выше. Прямо сейчас текст исчезает всякий раз, когда текстовое представление становится первым респондентом. Я хочу, чтобы текст исчезал всякий раз, когда пользователь фактически начинает печатать, а не только при выборе текстового представления. Когда появляется экран, я автоматически настраиваю первый респондент на представление текста, и я планирую сохранить его таким, чтобы путь. Но поскольку он устанавливается автоматически, вы не можете видеть текст заполнителя. Я хочу, чтобы текстовое представление исчезало только тогда, когда пользователь нажимает клавишу, а не потому, что она выбрана.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вот код

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!
    let placeholder = "Example: I started my career as a street wear model based in Maryland. After 3 years of working with some of the top companies there, I moved to LA, where I currently reside. I’ve been featured in shows, 12 magazines, commercials, and a number of music videos. Now, Im currently looking to continue working with clothing companies and campaigns."
    let start = NSRange(location: 0, length: 0)
    override func viewDidLoad() {
        super.viewDidLoad()
        textView.delegate = self
        textView.text = placeholder
    }
}

extension ViewController: UITextViewDelegate {
    func textViewDidChangeSelection(_ textView: UITextView) {
        // Moves cursor to start when tapped on textView with placeholder
        if textView.text == placeholder {
            textView.selectedRange = start
        }
    }
    func textViewDidChange(_ textView: UITextView) {
        // Manages state of text when changed
        if textView.text.isEmpty {
            textView.text = placeholder
            textView.textColor = .lightGray
        } else if textView.text != placeholder {
            textView.textColor = .black
        }
    }
    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        // Called when you're trying to enter a character (to replace the placeholder)
        if textView.text == placeholder {
            textView.text = ""
        }
        return true
    }
}

Обновлено # 1: максимальная длина

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    // Called when you're trying to enter a character (to replace the placeholder)
    if textView.text == placeholder {
        textView.text = ""
    } else if textView.text.count >= 175 && text.count > 0 {
        // Now it can delete symbols but can't enter new
        return false
    }
    return true
}

Есть небольшая ошибка при попытке очистить textView, удерживая кнопку стирания. Заполнитель не отображается. Метод textViewDidChange как-то не вызывается (не синхронизируется с shouldChangeTextIn). Возможное решение https://stackoverflow.com/a/9169556/5228431

0 голосов
/ 27 июня 2018

Предположим, у вас есть текст-заполнитель, такой как

let placeholderText = "Example: I started my career as a street wear model based in Maryland. After 3 years of working with some of the top companies there, I moved to LA, where I currently reside. I’ve been featured in shows, 12 magazines, commercials, and a number of music videos. Now, Im currently looking to continue working with clothing companies and campaigns."

И вы устанавливаете этот текст на textView в storyboard или в viewDidLoad перед вызовом becomeFirstResponder из textView.

Тогда в этих двух методах делегата вы можете добиться такого поведения, как показано ниже:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if textView.text == placeholderText {
        textView.text = ""
    }
    return true
}

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = placeholderText
    }
}

В настоящее время вы очищаете текст в textViewShouldBeginEditing, поэтому это основная причина, по которой вы не можете видеть этот текст. Вы должны удалить очистку текста там, но вы можете продолжать менять цвета и т. Д. Как есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...