1

カスタム TextField (KSTextField) を作成しようとしています。UITextField からテキスト フィールドを継承しました。以下の KSTextField.h ファイルをご覧ください。

#import <UIKit/UIKit.h>
#import <UIKit/UITextField.h>

@interface KSTextField : UITextField {}

@end

私の KSTextField.mi で、ダミーのテキスト属性を設定しようとしました。しかし、うまくいきません。super.text の使い方は間違っていますか?

私の主な目的は、私のプロジェクトに必要な大文字のみを許可するカスタム UITextField を作成することです。

#import "KSTextField.h"

@implementation KSTextField

- (id)init {
    self = [super init];

    super.text = @"help";
    return self;
}

- (void)textFieldDidChangeForKS:(KSTextField *)textField {
    self.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
    NSString *textToUpper = [textField.text uppercaseString];
    [self setText:textToUpper];
}

@end

また、私のViewController.hは以下にあります

#import <UIKit/UIKit.h>
#import "KSTextField.h"

@interface ViewController : UIViewController 


@property (nonatomic, copy) IBOutlet KSTextField *txtKsName;


@end

ここに私の KSTextField.text を設定したい ViewController.m があります

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.txtKsName = [[KSTextField alloc] init];

}

デリゲート イベントで問題が解決しません。後でもっと多くの機能を追加するからです。それは私のカスタムテキストフィールドになります ありがとう!

4

1 に答える 1

2

答えは: あなたのやり方は間違っている! 大文字のみを許可するためにサブクラス化する必要はありません。次を使用しUITextFieldDelegateます。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextFieldDelegate_Protocol/UITextFieldDelegate/UITextFieldDelegate.html

メソッドを使用して、textField:shouldChangeCharactersInRange:replacementString:入力した文字をボックスに追加できるかどうかを指定できます。

次のようなことを試してください:

- (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters
{
    NSCharacterSet *blockedCharacters = [[[NSCharacterSet uppercaseLetterCharacterSet] invertedSet] retain];
    return ([characters rangeOfCharacterFromSet:blockedCharacters].location == NSNotFound);
}
于 2013-03-28T14:12:35.433 に答える