2011-04-15 108 views

回答

16

執行正如我在以前的評論已經解釋過,在這種情況下,最好的解決辦法是擴大而不是使用一個類別UITextField類,所以你可以使用它明確地在所需的文本字段上。

#import <UIKit/UIKit.h> 

@interface MYTextField : UITextField 

@end 


@implementation MYTextField 

- (CGRect)textRectForBounds:(CGRect)bounds { 
    int margin = 10; 
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height); 
    return inset; 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    int margin = 10; 
    CGRect inset = CGRectMake(bounds.origin.x + margin, bounds.origin.y, bounds.size.width - margin, bounds.size.height); 
    return inset; 
} 

@end 

類別旨在將新功能添加到現有類,而不是覆蓋現有方法。

+0

一個問題。我如何使用Storyboard或Interface Builder中的這個新的擴展類?非常感謝。 – Ricardo 2012-04-24 13:38:07

+1

Hi Ricardo,您需要選擇Storyboard或Interface Builder中的元素並在Identity Inspector中編輯自定義類。 http://grrrab.it/5rr3xy – clopez 2012-04-24 15:35:23

+0

感謝clopez,現在完美的工作!:) – Ricardo 2012-04-24 20:47:22

1

我幾乎覆蓋- (CGRect)textRectForBounds:(CGRect)bounds。現在的問題是,當文本字段在進入到編輯模式的左邊距重置爲零.......

@implementation UITextField(UITextFieldCatagory) 

- (CGRect)textRectForBounds:(CGRect)bounds { 
    CGRect theRect=CGRectMake(bounds.origin.x+10, bounds.origin.y, bounds.size.width-10, bounds.size.height); 
    return theRect; 


} 
+0

嗨需要一個soln? – iOSPawan 2011-04-15 09:40:31

+0

爲什麼不是bounds.origin.y - 20? – 2013-12-17 20:22:32

-2

您可以通過擴展UITextField類試試這個

TextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
TextField.textAlignment = UITextAlignmentCenter; 
+0

我希望左邊距爲10 Px – iOSPawan 2011-04-15 09:23:11

42

你可以做到這一點,壓倒一切的兩種方法:

- (CGRect)textRectForBounds:(CGRect)bounds; 
- (CGRect)editingRectForBounds:(CGRect)bounds; 

下面是代碼:

在接口

@interface MYTextField : UITextField 

@end 

其在MYTextField.m

@implementation MYTextField 

static CGFloat leftMargin = 28; 

- (CGRect)textRectForBounds:(CGRect)bounds 
{ 
    bounds.origin.x += leftMargin; 

    return bounds; 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds 
{ 
    bounds.origin.x += leftMargin; 

    return bounds; 
} 
@end 
+1

感謝它爲我工作......但我有一個問題,它使用我的應用程序中的所有文本字段。我希望這是在特定的視圖控制器文本字段。可以你幫助我。 – Sabby 2012-02-10 12:22:19

+0

這是分類的預期行爲,在這種情況下不是解決方案。您必須擴展UITextField並覆蓋相同的方法。所以使用@clopez解決方案。 – TwiterZX 2012-04-02 08:22:46

+2

首先我投了票,但後來投了票。如果您爲原點添加10像素,則需要從寬度中減去_20_ px以在左側和右側保留相同的邊距。正如上面已經提到的那樣,通過一個類別加入重寫方法真的是一個壞主意。 – 2012-09-10 15:47:41

11
UITextField * textField = [[UITextField alloc]init]; 
    [textField setDelegate:self]; 
    [textField setFrame:CGRectMake(170,112,140,25)]; 
    [textField setBorderStyle:UITextBorderStyleNone]; 
    [textField setBackgroundColor:[UIColor clearColor]]; 
    [self.View addSubview:noofChildTField]; 


    UIView *paddingView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 5, 20)] autorelease]; 
    textField.leftView = paddingView; 
    textField.leftViewMode = UITextFieldViewModeAlways; 

試試這個代碼

+0

太棒了!謝謝!如果我們需要更大的利潤率,只需修改CGRectMake 5即可獲得更多價值。 – 2015-12-23 08:40:34

3

我希望看到在IB設置在屬性檢查器來調整這個值。事實證明,我已經無意中將對齊和邊框樣式設置爲與左側填充混淆的值。

你不會認爲選擇左對齊和沒有邊框會是一件大事,但它會使得單詞基本重疊或直接來到盒子的邊緣,並且看起來不正確。

壞:

enter image description here

好:

enter image description here

固定它直到我。希望這可以幫助別人。

+1

+1注意到'UITextBorderStyleRoundedRect'爲TextField添加了一個很好的左邊距,而'UITextBorderStyleNone'加上了你自己的(直角)邊框則將文本放到了邊緣。 – pkamb 2016-11-18 03:52:21

6

對於斯威夫特3:

充分利用UITextField的出口,說usernameTextField。然後,如果需要更多的空間寫了下面的代碼viewDidLoad()

let paddingView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 5, height: 20)) 
usernameTextField.leftView = paddingView 
usernameTextField.leftViewMode = .always 

更改width: 5到更大的價值。

+0

這比子類更好... :) – chrisoneiota 2017-10-09 14:16:11