Как установить местозаполнитель для нескольких текстовых представлений в одном контроллере представления в Swift - PullRequest
1 голос
/ 08 июля 2019

У меня есть контроллер представления, который содержит два текстовых представления (storyTitle и storyDescription).Я добавил заполнители для обоих текстовых представлений, код ниже покажет вам, как я это сделал:

// Setup the story title text field
func setupStoryTitleTextView() {

    storyTitle.textColor = .gray
    storyTitle.text = "Add story title"
    storyTitle.textContainerInset = UIEdgeInsets(top: 10, left: 20, bottom: 10, right: 20)
    self.storyTitle.delegate = self

    view.addSubview(storyTitle)

}
// Setup the storyDescription text view
func setupStoryDescriptionTextView() {

    storyDescription.text = "Description of the story"
    storyDescription.textColor = .gray
    storyDescription.textContainerInset = UIEdgeInsets(top: 10, left: 20, bottom: 300, right: 20)
    self.storyDescription.delegate = self

    view.addSubview(storyDescription)

}
// To remove placeholder text when the user starts typing
func textViewDidBeginEditing(_ textView: UITextView) {

    // Story title text view
    if storyTitle.textColor == .gray {
        storyTitle.text = nil
        storyTitle.textColor = .black
    }

    // Story description text view
    if storyDescription.textColor == .gray {
        storyDescription.text = nil
        storyDescription.textColor = .black
    }
}
// To bring the placeholder back when the text views don't contain any text
func textViewDidEndEditing(_ textView: UITextView) {

    // Story title text view
    if storyTitle.text.isEmpty {
        storyTitle.text = "Add story title"
        storyTitle.textColor = .gray
    }

    // Story description text view
    if storyDescription.text.isEmpty {
        storyDescription.text = "Description of the story"
        storyDescription.textColor = .gray
    }
}

В данном случае происходит то, что, когда я нажимаю на одно текстовое представление, заполнители в обоихтекстовые представления исчезают, это потому, что выполняются оба условия if в textViewDidBeginEditing.Как я могу предотвратить это?Любая помощь приветствуется, спасибо:)

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Вы можете легко сделать это, назначив теги для просмотра объектов (ваши текстовые просмотры). Присвойте тегу textview.tag = [некоторое число], а затем вы также можете добавить к вашим условиям что-то подобное:

storyDescription.tag = 1

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.tag == 1 && storyTitle.textColor == .gray {
        storyTitle.text = nil
        storyTitle.textColor = .black
    }
}

А это аналог другого текстового представления

0 голосов
/ 08 июля 2019
// To remove placeholder text when the user starts typing
func textViewDidBeginEditing(_ textView: UITextView) {

    // Story title text view
    if storyTitle.textColor == .gray {
        storyTitle.text = nil
        storyTitle.textColor = .black
    }

    // Story description text view
    if storyDescription.textColor == .gray {
        storyDescription.text = nil
        storyDescription.textColor = .black
    }
}
// To bring the placeholder back when the text views don't contain any text
func textViewDidEndEditing(_ textView: UITextView) {

    // Story title text view
    if storyTitle.text.isEmpty {
        storyTitle.text = "Add story title"
        storyTitle.textColor = .gray
    }

    // Story description text view
    if storyDescription.text.isEmpty {
        storyDescription.text = "Description of the story"
        storyDescription.textColor = .gray
    }
}

Этот фрагмент кода будет применяться к обоим вашим TextViews.Это неправильно, в идеале вы должны использовать textView, предоставленный в методе делегата, например:

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == .gray {
        textView.text = nil
        textView.textColor = .black
    }
}
// To bring the placeholder back when the text views don't contain any text
func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.textColor = .gray
    }
    // You can then restore the text depending on which TextView ended the edition, for example:
    if textView == self.storyTitle {
        self.storyTitle.text = "Add story title"
    }
}

Кстати, решение, будет ли TextView отображать заполнитель на основе цвета, может небыть лучшим способом, особенно если вы планируете в конечном итоге поддерживать декорированные струны.Это совсем другое обсуждение, но пока оно будет работать

...