2016-06-29 12 views
0

Ich war UITextField Unterklasse, um mein eigenes Textfeld zu machen.NSTextAlignmentCenter funktioniert nicht mit benutzerdefinierten Textfeld

Ich habe self.textAlignment = NSTextAlignmentCenter; verwendet, um die Textausrichtung festzulegen, aber als ich mit der Bearbeitung anfing, wurde die Anfangsposition des Cursors nicht exakt in der Mitte belassen. Wenn ich jedoch etwas eingegeben habe, war der Text in der Mitte.

textRectForBounds: und editingRectForBounds: alle geben den gleichen CGRect Wert zurück. Hier

ist der Code:

@interface MyTextfield() <UITextFieldDelegate> 

@end 

- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 

    if (self) { 
     self.delegate = self; 
     self.textAlignment = NSTextAlignmentCenter; 
    } 

    return self; 
} 
- (CGRect)textRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 20.5, 4.5); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 20.5, 4.5); 
} 

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    // Do some animation 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    // Do some animation 
} 

Was ist das Problem? Wie kann ich es reparieren?

+0

Wo Sie den Code der Ausrichtung geschrieben haben? Können Sie Ihre benutzerdefinierte textField-Klasse anzeigen? – Pushpa

+0

Ich setze die Ausrichtung in 'initWithFrame:'. – CokileCeoi

+0

können Sie bitte Ihren Code hier hinzufügen, wenn möglich .. –

Antwort

0

Erstellen Sie zunächst eine UITextField-Klasse.

CustomTextfield.h

#import <UIKit/UIKit.h> 

@interface CustomTextfield : UITextField 
@end 

CustomTextfield.m

#import "CustomTextfield.h" 
@interface CustomTextfield() <UITextFieldDelegate> 

@end 

@implementation CustomTextfield 
- (instancetype)initWithFrame:(CGRect)frame { 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.textAlignment = NSTextAlignmentCenter; 
     self.font = [UIFont systemFontOfSize:15]; 
     self.placeholder = @"Test"; 
     self.autocorrectionType = UITextAutocorrectionTypeNo; 
     self.keyboardType = UIKeyboardTypeDefault; 
     self.returnKeyType = UIReturnKeyDone; 
     self.textAlignment = NSTextAlignmentCenter; 
     self.clearButtonMode = UITextFieldViewModeWhileEditing; 
     self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
     self.borderStyle=UITextBorderStyleRoundedRect; 
    } 

    return self; 
} 
- (CGRect)textRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 20.5, 4.5); 
} 

- (CGRect)editingRectForBounds:(CGRect)bounds { 
    return CGRectInset(bounds, 20.5, 4.5); 
} 

Jetzt CustomTextfield Klasse Ihren View-Controller wie folgt verwenden.

-(void)viewDidLoad{ 
    UITextField *txtEmailfield = [[CustomTextfield alloc] initWithFrame:CGRectMake(10, 200, 300, 40)]; 
    txtEmailfield.delegate = self; 

    [self.view addSubview:txtEmailfield]; 
} 

Hinweis: In dieser Ansicht Controller fügen Sie diese in @interface yourviewcontroller Name() <UITextFieldDelegate>

+0

funktioniert nicht für mich. Übrigens verstehe ich nicht ganz, warum Sie den Delegaten auf self setzen, und legen Sie dann den Delegierten fest, um den Controller erneut anzuzeigen. – CokileCeoi

+0

oh! Es tut mir leid, ich kopiere einfach Paste in meinen aktuellen Code, deshalb kann das sein, dass in dort ist. Jetzt sagen Sie mir, Sie haben benutzerdefinierte Textfeld als Programm oder Drag and drop auf Controller ... –

+0

programmatisch – CokileCeoi