2015-06-25 55 views
-1

我想添加一個「錯誤消息」氣泡出現在文本框頂部,當用戶輸入不正確的值。我一直在使用可以正常工作的.leftView屬性,但它佔用了textField中的「空間」,將內容推向右側。將leftView顯示爲「覆蓋圖」而不是在該領域本身的最佳方式是什麼? (即刪除它的邊界)UITextfield 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 
    } 
} 
+0

難道你不能只是創建一個氣泡視圖,並將其作爲子視圖添加到您的視圖控制器? – almas

+0

這是真的,但我試圖做一個自定義的UITextField,分開處理所有這些。它使得表單驗證更容易分離所有的代碼,所以我可以在其他地方使用它。 – Alex

+0

請將您的代碼添加到問題 –

回答

-1

所以我想我已經知道了。通過使用leftViewRectForBounds並返回一個零CGRect,我可以消除它的物理存在。

override func leftViewRectForBounds(bounds: CGRect) -> CGRect { 
    return CGRect(x: 0, y: 0, width: 0, height: 0) 
} 
+0

您是否嘗試過我建議的代碼?它起作用,氣泡出現在文本框中。除非你已經嘗試了代碼,否則請不要低估。 – Alex