2016-09-28 64 views
0

我正在嘗試做一個Instagram的克隆,而且我有點卡住了UITextField的自定義。也許是一個noob問題,但它在這裏。插圖UITextField,左右不同的值

我想要實現的是如果爲我的UITextField添加不同的插入,一個在左側較小,另一個在右側較大,所以我有足夠空間用於UITextField的清除按鈕。

我試圖做到這一點: Instagram app

,但我得到的最接近的事是這樣的: Clone app

正如你可以看到清晰的按鈕是我的版本更擠,但我不能處理只插入右側多一點,而不觸及左側。

我用我的UITextField子類(SWIFT 3)下面的代碼:

override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

但它只是讓我做展臺一側改變DX。任何建議?在此先感謝

回答

0

管理由自己來解決它:

override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return bounds.insetBy(dx: 16, dy: 0) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 16, y: bounds.origin.y, width: bounds.width - 56, height: bounds.height) 
    } 

    override func clearButtonRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.width - 36, y: bounds.origin.y, width: 16, height: bounds.height) 
    } 

這樣,它的工作就像Instagram的。當它處於編輯模式時,它更多地插入右側,並且當它處於正常模式時,它具有16的兩側的插入。

0

這對我的作品

let rightView = UIView(frame: CGRectMake(0, 0, 16, 16)) 
textField.rightViewMode = UITextFieldViewMode.Always 
textField.rightView = rightView 

let leftView = UIView(frame: CGRectMake(0, 0, 20, 20)) 
textField.leftViewMode = UITextFieldViewMode.Always 
textField.leftView = leftView 

願它可以幫助你。

+0

我也嘗試過這一點,但這種方法的問題在於,至少在斯威夫特3,當您使用rightView清除按鈕消失了......無論如何,我找到了一種方法來做到這一點 –