2013-08-22 178 views
5

有沒有辦法調整UITextField上rightView的位置?我試圖在視圖上設置框架(設置爲rightView),但它沒有改變任何東西。rightView的位置UITextField

我想避免製作兩個視圖,一個作爲rightView,另一個作爲rightView的子視圖,如果可能的話,我改變子視圖的位置。

+0

你試過'[textField.rightView setFrame:someFrame];'?或者'setBounds:'。 – Sti

+0

您需要爲此獲取2個視圖。 –

回答

21

右覆蓋視圖放置在由接收器的rightViewRectForBounds:方法返回的矩形中。

所以我建議你繼承UITextField並重寫此方法,像這樣:

@interface CustomTextField: UITextField 

@end 

@implementation CustomTextField 

// override rightViewRectForBounds method: 
- (CGRect)rightViewRectForBounds:(CGRect)bounds{ 
    CGRect rightBounds = CGRectMake(bounds.origin.x + 10, 0, 30, 44); 
    return rightBounds ; 
} 
+2

很酷。然而,我發現對於正確的視圖標註,我最好使用bounds.size.width - 30,即CGRect rightBounds = CGRectMake(bounds.size.width - 30,0,30,50);這樣就可以獲得文本字段的寬度並減去該數字以獲得正確視圖的填充 –

-1

對於文本字段右側斯威夫特 添加圖片

 textField.rightView = UIImageView(image: "small-calendar")) 
     textField.rightView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20) 
     textField.rightViewMode = .always 
-1

@Puneet夏爾馬的答案是偉大的,但該將需要創建一個子類UITextField的子類,我所做的是創建一個UIView作爲填充。

我的代碼工作,而不需要繼承

這裏是我的代碼,雖然這是寫在斯威夫特3

// this is the view I want to see on the rightView 
let checkImageView = UIImageView(image: UIImage(named: "check24.png")) 
checkImageView.frame = CGRect(x: 0, y: 0, width: 24, height: 24) 
checkImageView.curveEdges(12) 
checkImageView.contentMode = .scaleAspectFit 

// declare how much padding I want to have 
let padding: CGFloat = 6 

// create the view that would act as the padding 
let rightView = UIView(frame: CGRect(
    x: 0, y: 0, // keep this as 0, 0 
    width: checkImageView.frame.width + padding, // add the padding 
    height: checkImageView.frame.height)) 
rightView.addSubview(checkImageView) 

// set the rightView UIView as the textField's rightView 
self.textField.rightViewMode = .whileEditing 
self.textField.rightView = rightView 

這裏是發生了什麼事,那rightView這是一個UIView有一個透明的彩色背景,然後給了錯覺,有一個填充,而沒有。