Ios 多个UITextView占位符

Ios 多个UITextView占位符,ios,swift,uitextview,placeholder,Ios,Swift,Uitextview,Placeholder,我试图将占位符放入我的UITextView中,并在这里找到了一个使用以下代码块的解决方案: func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { let currentText:NSString = storyView.text let updatedText = currentText.str

我试图将占位符放入我的UITextView中,并在这里找到了一个使用以下代码块的解决方案:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

    let currentText:NSString = storyView.text 
    let updatedText = currentText.stringByReplacingCharactersInRange(range, withString:text)

    if updatedText.isEmpty {
        storyView.text = "Write out your story here!"
        storyView.textColor = UIColor.lightGrayColor()
        storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        return false

    }else if storyView.textColor == UIColor.lightGrayColor() && !text.isEmpty {
        storyView.text = nil
        storyView.textColor = UIColor.blackColor()
    }

    return true
}

func textViewDidChangeSelection(storyView: UITextView) {
    if self.view.window != nil {
        if storyView.textColor == UIColor.lightGrayColor() {
            storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        }
    }
}

它可以工作,我对此很满意,但我想将其应用于同一ViewController中的其他UITextView。如何在不创建textView方法的重复实例的情况下执行此操作?

您可以在
shouldChangeTextInRange
方法中使用
textField.tag

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

    let currentText:NSString = storyView.text 
    let updatedText = currentText.stringByReplacingCharactersInRange(range, withString:text)

    if updatedText.isEmpty {


if (textField.tag==0)//
 {
   storyView.text = "Write out your story here!" // stuff
}
else if(textField.tag==1)//
 {
    storyView.text = "Example 2 "// stuff
}
   storyView.textColor = UIColor.lightGrayColor()
  storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        return false

    }else if storyView.textColor == UIColor.lightGrayColor() && !text.isEmpty {
        storyView.text = nil
        storyView.textColor = UIColor.blackColor()
    }

    return true
}

func textViewDidChangeSelection(storyView: UITextView) {
    if self.view.window != nil {
        if storyView.textColor == UIColor.lightGrayColor() {
            storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        }
    }

}
为相同的
viewcontroller
textField
添加标记。并将该标记用于
shouldChangeTextInRange
方法

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {

    let currentText:NSString = storyView.text 
    let updatedText = currentText.stringByReplacingCharactersInRange(range, withString:text)

    if updatedText.isEmpty {


if (textField.tag==0)//
 {
   storyView.text = "Write out your story here!" // stuff
}
else if(textField.tag==1)//
 {
    storyView.text = "Example 2 "// stuff
}
   storyView.textColor = UIColor.lightGrayColor()
  storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        return false

    }else if storyView.textColor == UIColor.lightGrayColor() && !text.isEmpty {
        storyView.text = nil
        storyView.textColor = UIColor.blackColor()
    }

    return true
}

func textViewDidChangeSelection(storyView: UITextView) {
    if self.view.window != nil {
        if storyView.textColor == UIColor.lightGrayColor() {
            storyView.selectedTextRange = storyView.textRangeFromPosition(storyView.beginningOfDocument, toPosition: storyView.beginningOfDocument)
        }
    }

}

也许它会对你有所帮助。

你应该考虑使用标签。然后在
shouldChangeTextInRange
中检查哪个文本视图是文本视图,并设置正确的占位符文本。@allen,如果我的答案对您有帮助的话。请给我投票或打分作为答案。