1. 程式人生 > >iOS之UITextField對輸入的內容的長度限制和內容限制

iOS之UITextField對輸入的內容的長度限制和內容限制

這裡講解兩個對文字框輸入內容的長度的限制:

首先是通過新增事件的方式來限制:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //建立文字框
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 50)];
    //文字框的邊框的樣式
    textField.borderStyle = UITextBorderStyleRoundedRect;
    //為文字框新增事件(因為UITextField是繼承於UIControl的)
    [textField addTarget:self action:@selector(limit:) forControlEvents:UIControlEventEditingChanged];
    //新增到當前檢視
    [self.view addSubview:textField];
}

//限制文字框的輸入內容和文字的長度
- (void)limit:(UITextField *)textField{
    
    //限制文字的輸入長度不得大於10個字元長度
    if (textField.text.length >= 10){
    
        //擷取文字字元長度為10的內容
        textField.text = [textField.text substringToIndex:10];
    }
}

其次是通過UITextField的代理方法來進行限制的,並在此方法中進行輸入內容的限制:
<span style="color:#ff0000;">//設定只允許輸入123和qwe(區分大小寫)</span>
#define textFieldContent @"123qwe"

@interface ViewController ()<UITextFieldDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //建立文字框
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, 50)];
    //文字框的邊框的樣式
    textField.borderStyle = UITextBorderStyleRoundedRect;
    //設定當前控制器為文字框的代理
    textField.delegate = self;
    //新增到當前檢視
    [self.view addSubview:textField];
}

#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    //先設定只能輸入的集合  invertedSet就是將咱們允許輸入的字串的字元找出
    NSCharacterSet *canInputSet = [[NSCharacterSet characterSetWithCharactersInString:textFieldContent] invertedSet];
    //把允許輸入的內容轉化成陣列,再轉化成字串
    NSString *str = [[string componentsSeparatedByCharactersInSet:canInputSet] componentsJoinedByString:@""];
    //判斷輸入的字元是否包含在允許輸入的字元之內
    BOOL isSuccess = [string isEqualToString:str];
    <span style="color:#ff0000;">//限制文字框輸入內容的長度不得超過10且有輸入內容的限制</span>
    if (textField.text.length <= 10 && isSuccess){
        //返回值為YES的時候,文字框可以進行編輯
        return YES;
    }else{
        //當返回NO的時候,文字框內的內容不會在再改變,甚至不能進行刪除
        return NO;
    }
}