我制作了一个应用,在其中,我需要使用占位符创建UITextView
。我通过继承实现了这一点,并由他们自己作为委托创建了自己的UITextView类(在开始编辑和结束编辑时添加了一些逻辑)。
寻找有关Is it correct to put such logic into UIView?
的信息,发现很多文章说您不应该这样做,但是找不到原因?
我尝试查找有关继承UIView类并为其赋予一些新逻辑(例如:选择颜色,字体,作为委托进行制造,计算布局尺寸等)是否正确的信息,或者尝试使用ViewControllers或自定义presenterControllers
在什么情况下应该使用继承,为什么?在不该做什么?最佳做法是什么?为什么是最佳做法?
将非常感谢您提供详细的解释。
示例:
class PlaceholderTextView: UITextView {
override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupViews()
}
private func setupViews() {
self.delegate = self
self.text = "Enter some text..."
self.textColor = UIColor.lightGray
self.font = UIFont.italicSystemFont(ofSize: 12)
}
}
extension PlaceholderTextView: UITextViewDelegate {
func textViewDidBeginEditing(_ textView: UITextView) {
if self.textColor == UIColor.lightGray {
self.text = nil
self.textColor = UIColor.black
self.font = UIFont.systemFont(ofSize: 12)
}
}
func textViewDidEndEditing(_ textView: UITextView) {
if self.text.isEmpty {
self.text = "Enter some text..."
self.textColor = UIColor.lightGray
self.font = UIFont.italicSystemFont(ofSize: 12)
}
}
}
答案 0 :(得分:0)
在这种情况下,您应该继承
当您想向现有类添加其他内容时,例如UITextView
并没有提供textview
类占位符,尽管它具有属性placeholder
其次是代码的可重用性。例如,在UITextField
类中,您想为项目中的所有文本字段更改占位符rect,那么您就不会在每个视图控制器中更改占位符rect的属性,而是制作一个{{ 1}},并使用该类
将这种逻辑放入UIView是否正确?
如果您要进行一些自定义绘图,则必须重写UItextField
子类中的逻辑,而必须重写Draw()
的{{1}}方法