【发布时间】:2015-06-25 23:55:48
【问题描述】:
我正在尝试添加一个“错误消息”气泡,当用户输入不正确的值时,该气泡会出现在文本字段的顶部。我一直在使用 .leftView 属性,它工作得很好,但是它占用了 textField 中的“空间”,将内容推到了右边。将 leftView 显示为“覆盖”而不是字段本身的最佳方式是什么? (即删除它的边界)
class ValidatedTextField: UITextField {
override init(frame: CGRect) {
super.init(frame: frame)
// Defaults
maxLength = 40
layer.sublayerTransform = CATransform3DMakeTranslation(leftPadding, 0, 0)
backgroundColor = UIColor.whiteColor()
// Listen in on own text input
self.addTarget(self, action: "textHasChanged", forControlEvents: UIControlEvents.EditingChanged)
self.addTarget(self, action: "checkTextValid", forControlEvents: UIControlEvents.EditingDidEnd)
}
override func layoutSubviews() {
super.layoutSubviews()
// Add error label message
labelMessage.frame = CGRectMake(10-leftPadding, -10, self.bounds.size.width-20, 24)
labelMessage.backgroundColor = .blackColor()
labelMessage.text = "Message goes here"
labelMessage.font = UIFont.boldSystemFontOfSize(16)
labelMessage.textColor = .whiteColor()
labelMessage.textAlignment = .Center
labelMessage.layer.cornerRadius = 8
self.leftView = labelMessage
self.leftViewMode = .Always
}
}
【问题讨论】:
-
你不能只创建一个气泡视图并将其作为子视图添加到你的视图控制器吗?
-
没错,但我正在尝试制作一个自定义 UITextField 来分别处理所有这些。它使表单验证更容易分离所有代码,以便我可以在其他地方使用它。
-
请将您的代码添加到问题中
-
您需要创建一个自定义的
UIView,其中包含一个文本字段和其他一些内容...而不是UITextView可能... -
UITextField 没有为 leftView 提供类似 frame 的属性,所以我们不能改变 leftView 的位置。您可以尝试创建一个自定义视图,比如说 MyCustomTextFieldWithBubbleMessageView,它将包含两个属性:
UITextField和UIView,最后一个视图将是您的自定义气泡消息,也可以是UILabel。然后你可以使用autolayout并相应地显示气泡消息。