Just a Computer Graphics Studio & My Life

TextField每次輸入就判斷使否要改變值,有此需求是因為我想限制使用者輸入某些字元,很簡單地想:每次輸入字元都去檢查。有協定方法可以直接來實做。

只要實作以下這個delegate即可做到效果。這個例子是判斷輸入的字數,也可以用來檢查每次輸入的值是否合法。

  • 參數:string就是此時輸入的那個字元;textField就是此時正在運作的輸入框;range則是輸入字元的位置。
  • 回傳值:YES就是可以改變輸入框的值,NO則相反。
 /**
 Theme: Check the value of textField
 IDE: Xcode 5
 Language: Objective C
 Date: 102/12/11
 Author: HappyMan
 Blog: https://cg2010studio.wordpress.com/
 */
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
    if ([string isEqualToString:@"\n"]) //按返回可以改變
    {
        return YES;
    }
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range withString:string]; //得到輸入框的內容
    NSLog(@"toBeString: %@",toBeString);
    NSLog(@"string: %@",string);

    if (alertText == textField) //判斷是否為我們限定的輸入框
    {
        if ([toBeString length] > 15) { //如果輸入框字元數大於15則跳出警告

            textField.text = [toBeString substringToIndex:15];
            UIAlertView *alert = [[UIAlertView alloc]
                                  initWithTitle:nil
                                  message:@"只能輸入15個字喔"
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil, nil];
            [alert show];
            return NO;
        }
    }
    return YES;
}

以輸入「HappyMan」為範例,執行結果顯示:

toBeString: H
string: H
toBeString: Ha
string: a
toBeString: Hap
string: p
toBeString: Happ
string: p
toBeString: Happy
string: y
toBeString: HappyM
string: M
toBeString: HappyMa
string: a
toBeString: HappyMan
string: n

此時debug模式,列印range,其值如下:

Printing description of range:
(NSRange) range = location=7, length=0

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: