CGFloat
ã
NSString
ã
NSInteger
ãªã©ïŒã«ããããšãã§ããŸãã ããŒã¿åããšã«ç°ãªãæ€èšŒã¢ã«ãŽãªãºã ãå¿ èŠã§ãã åã¢ã«ãŽãªãºã ããªããžã§ã¯ããšããŠã«ãã»ã«åã§ããå Žåãif-else / switch-caseã¹ããŒãã¡ã³ãã®ã°ã«ãŒãã䜿çšããŠããŒã¿ããã§ãã¯ããå¿ èŠãªã¢ã«ãŽãªãºã ã決å®ããããšã¯ã§ããŸããã
ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã§ã¯ãé¢é£ããã¢ã«ãŽãªãºã ãããŸããŸãªã¯ã©ã¹ã®æŠç¥ã«åºå¥ã§ããŸãã ãã®ãããªå Žåã«äœ¿çšãããèšèšãã¿ãŒã³ã¯ãæŠç¥ãšåŒã°ããŸãã ãã®ç« ã§ã¯ãStrategyãã¿ãŒã³ã®æŠå¿µãšäž»èŠãªæ©èœã«ã€ããŠèª¬æããŸãã ãã®ç« ã®åŸåã§ã
UITextField
ããã¹ããã£ãŒã«ã
UITextField
å ¥åãæ€èšŒããããã®æŠç¥ãšããŠãããŒã¿ãæ€èšŒããããã®ããã€ãã®ã¯ã©ã¹ãèšèšããã³å®è£ ããŸãã
æŠç¥ãã¿ãŒã³ãšã¯äœã§ããïŒ
ãã®ãã¿ãŒã³ã®éèŠãªåœ¹å²ã®1ã€ã¯ããµããŒãããããã¹ãŠã®ã¢ã«ãŽãªãºã ã®å ±éã€ã³ã¿ãŒãã§ãŒã¹ã宣èšããã¹ãã©ããžãŒã¯ã©ã¹ã«ãã£ãŠæããããŸãã æŠç¥ã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠã¢ã«ãŽãªãºã ãå®è£ ããæŠç¥ã®ç¹å®ã®ã¯ã©ã¹ããããŸãã ã³ã³ããã¹ããªããžã§ã¯ãã¯ãç¹å®ã®æŠç¥ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã䜿çšããŠæ§æãããŸãã ã³ã³ããã¹ããªããžã§ã¯ãã¯ãæŠç¥ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãç¹å®ã®æŠç¥ã¯ã©ã¹ã§å®çŸ©ãããã¢ã«ãŽãªãºã ãåŒã³åºããŸãã ãããã®é¢ä¿ã¯ãå³19â1ã®ã¯ã©ã¹å³ã«ç€ºãããŠããŸãã
å³19-1ã ã¯ã©ã¹æ§é ãã¿ãŒã³æŠç¥
ConcreteStrategy
ã¯ã©ã¹ïŒAãBãããã³CïŒã®åœ¢åŒã®é¢é£ã¢ã«ãŽãªãºã ã®ã°ã«ãŒããŸãã¯éå±€ã¯ãå ±éã®
algorithmInterface
å ±æããããã
Context
ã¯åãã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšããŠç°ãªãããŒãžã§ã³ã®ã¢ã«ãŽãªãºã ã«ã¢ã¯ã»ã¹ã§ããŸãã
ã泚æ æŠç¥ãã¿ãŒã³ ïŒã¢ã«ãŽãªãºã ã®ãã¡ããªãŒãå®çŸ©ãããããã®ãããããã«ãã»ã«åãããããã亀æå¯èœã«ããŸãã ãã®æŠç¥ã«ãããã¢ã«ãŽãªãºã ã䜿çšãã顧客ãšã¯ç¡é¢ä¿ã«ã¢ã«ãŽãªãºã ãå€æŽã§ããŸãã
GoFã®ãã¶ã€ã³ãã¿ãŒã³ïŒAddison-Wesleyã1994ïŒã§äžããããåæå®çŸ©ã
Context
ã€ã³ã¹ã¿ã³ã¹ã¯ãå®è¡æã«ããŸããŸãª
ConcreteStrategy
ãªããžã§ã¯ãã䜿çšããŠæ§æã§ããŸãã å€æŽã¯å éšããçºçãããããããã¯
Context
ãªããžã§ã¯ãã®ãå éšãã®å€æŽãšèŠãªãããšãã§ããŸãã å¯Ÿç §çã«ããã³ã¬ãŒã¿ãŒïŒç¬¬16ç« ããã³ã¬ãŒã¿ãŒãã¿ãŒã³ãšä»¥åã®èšäºãåç §ïŒã¯ãå€æŽãå€éšãããããã³ã°ãããããããªããžã§ã¯ãã®ãã¹ãã³ããå€æŽããŸãã çžéç¹ã®è©³çŽ°ã«ã€ããŠã¯ã第16ç« ïŒåã®èšäºïŒã®ãå éšãã®å€æŽãšæ¯èŒãããªããžã§ã¯ãã®ãã¹ãã³ãã®å€æŽã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
Model-View-Controllerã®æŠç¥ãã¿ãŒã³
Model-View-Controllerãã¿ãŒã³ã§ã¯ãã³ã³ãããŒã©ãŒã¯ã¢ãã«ã«å«ãŸããããŒã¿ããã€ã©ã®ããã«è¡šç€ºãããã決å®ããŸãã ãã¥ãŒèªäœã¯äœãã衚瀺ããæ¹æ³ãç¥ã£ãŠããŸãããã³ã³ãããŒã©ãŒãããã瀺ããŸã§ãããç¥ããŸããã å¥ã®ã³ã³ãããŒã©ãŒã䜿çšããåããã©ãŒã ã䜿çšããå ŽåãåºåããŒã¿ã®åœ¢åŒã¯åããããããŸããããæ°ããã³ã³ãããŒã©ãŒããã®ä»ã®çµè«ã«åŸã£ãŠããŒã¿åãç°ãªãå ŽåããããŸãã ãã®å Žåã®ã³ã³ãããŒã©ãŒã¯ãããã°ããã¥ãŒãªããžã§ã¯ãã®æŠç¥ã§ãã åã®ç« ã§è¿°ã¹ãããã«ãã³ã³ãããŒã©ãŒãšãã¥ãŒã®é¢ä¿ã¯æŠç¥ãã¿ãŒã³ã«åºã¥ããŠããŸãã
æŠç¥ãã¿ãŒã³ã®äœ¿çšã¯ãã€é©åã§ããïŒ
ãã®ãã¿ãŒã³ã®äœ¿çšã¯ã次ã®å Žåã«æšå¥šãããŸãã
- ã¯ã©ã¹ããžãã¯ã¯ãå€ãã®æ¡ä»¶ã¹ããŒãã¡ã³ãã䜿çšããŠãç®çã®åäœãéžæããŸãã æ¡ä»¶ã³ãŒããå¥ã®æŠç¥ã¯ã©ã¹ã«ç§»åã§ããŸãã
- ç°ãªãããŒãžã§ã³ã®ã¢ã«ãŽãªãºã ãå¿ èŠã§ãã
- è€éã§çãç¹å®ã®ããŒã¿æ§é ãïŒé¡§å®¢ã«ïŒå ¬éããããªãã§ãããã
UITextFieldã¯ã©ã¹ãäŸãšããŠäœ¿çšããããŒã¿æ€èšŒæŠç¥ã®äœ¿çš
ã¢ããªã±ãŒã·ã§ã³ã§ã®æŠç¥ãã¿ãŒã³ã®å®è£ ã®ç°¡åãªäŸãäœæããŸãããã ãŠãŒã¶ãŒå ¥åãåãä»ãã
UITextField
ãªããžã§ã¯ããã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠã ãšããŸãã åŸã§ã¢ããªã±ãŒã·ã§ã³ã§å ¥åçµæã䜿çšããŸãã æåïŒaãzãŸãã¯AãZïŒã®ã¿ãåãå ¥ããããã¹ãå ¥åãã£ãŒã«ãããããæ°å€ããŒã¿ïŒ0ã9ïŒã®ã¿ãåãå ¥ãããã£ãŒã«ãããããŸãã ãã£ãŒã«ããžã®å ¥åãæ£ããããšã確èªããããã«ãåãã£ãŒã«ãã«ã¯ããŠãŒã¶ãŒãç·šéãçµäºããåŸã«èµ·åãããäœããã®çš®é¡ã®ãªã³ãµã€ãããŒã¿æ€èšŒæé ãå¿ èŠã§ãã
ããªã²ãŒããªããžã§ã¯ãã®ã¡ãœãã
UITextField
ã
textFieldDidEndEditing:
å¿ èŠãªããŒã¿æ€èšŒãé 眮ã§ã
textFieldDidEndEditing:
UITextField
ã€ã³ã¹ã¿ã³ã¹ã¯ããã©ãŒã«ã¹ã倱ããã³ã«ãã®ã¡ãœãããåŒã³åºããŸãã ãã®æ¹æ³ã§ã¯ãæ°åã®ã¿ãããžã¿ã«ãã£ãŒã«ãã«å ¥åãããæåã®ã¿ãã¢ã«ãã¡ããããã£ãŒã«ãã«å ¥åãããããã«ããããšãã§ããŸãã ãã®ã¡ãœããã¯ãå ¥åãã£ãŒã«ãã®çŸåšã®ãªããžã§ã¯ããžã®ãªã³ã¯ã§ïŒ
textField
ãã©ã¡ãŒã¿ãŒã®åœ¢åŒã§ïŒåãå ¥ããŸãããããã¯2ã€ã®ãªããžã§ã¯ãã®ã©ã¡ãã§ããïŒ
Tragiaãã¿ãŒã³ããªããã°ããªã¹ã19â1ã«ç€ºããããªã³ãŒãã«ãªããŸãã
ãªã¹ã19â1ã ããªã²ãŒãã¡ãœããtextFieldDidEndEditingã®å žåçãªUITextFieldã³ã³ãã³ãæ€èšŒã¹ã¯ãªãã
- (void)textFieldDidEndEditing:(UITextField *)textField { if (textField == numericTextField) { // [textField text] , // } else if (textField == alphaTextField) { // [textField text] , // } }
ãã¡ãããç°ãªãããŒã¿ã®å ¥åãã£ãŒã«ããå€ãå Žåãæ¡ä»¶ã¹ããŒãã¡ã³ããå¢ããå¯èœæ§ããããŸãã ãããã®ãã¹ãŠã®æ¡ä»¶åŒãåãé€ãã°ãã³ãŒãããã管çããããããããšãã§ããŸããããã«ãããã³ãŒãã®ãµããŒãã«ããå°æ¥ã®ç掻ãå€§å¹ ã«ç°¡çŽ åãããŸãã
ãã³ãïŒã³ãŒãã«å€ãã®æ¡ä»¶ã¹ããŒãã¡ã³ããããå Žåãããã¯ãããããªãã¡ã¯ã¿ãªã³ã°ããã¹ãã©ããžãŒã®åå¥ã®ãªããžã§ã¯ãã«åé¢ããå¿ èŠãããããšãæå³ããå ŽåããããŸãã
ããã§ã®ç®æšã¯ããã®æ€èšŒã³ãŒããååŸããŠãããŸããŸãªã¯ã©ã¹ã®æŠç¥ã«åæ£ãããããªã²ãŒãããã®ä»ã®ã¡ãœããã§åå©çšã§ããããã«ããããšã§ãã åã¯ã©ã¹ã¯å ¥åãã£ãŒã«ãããè¡ãååŸããç®çã®æŠç¥ã«åºã¥ããŠãã§ãã¯ãããã§ãã¯ã倱æããå Žåã¯æçµçã«
BOOL
åã®å€ãš
NSError
ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã è¿ããã
NSError
ãªããžã§ã¯ãã¯ãæ€èšŒãæåããªãã£ãçç±ãå€æããã®ã«åœ¹ç«ã¡ãŸãã ããžã¿ã«å ¥åãšæåå ¥åã®äž¡æ¹ã®æ€èšŒã¯äºãã«é¢é£ããŠããããïŒåãã¿ã€ãã®å ¥åãšåºåãæã£ãŠããŸãïŒã1ã€ã®ã€ã³ã¿ãŒãã§ãŒã¹ãšçµã¿åãããããšãã§ããŸãã ã¯ã©ã¹ã®ã»ãããå³19â2ã®ã¯ã©ã¹å³ã«ç€ºããŸãã
å³19â2ã ã¯ã©ã¹å³ã¯ãCustomTextFieldãšããã«é¢é£ããæŠç¥ã®é¢ä¿ã瀺ããŠããŸãã
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ããããã³ã«ãšããŠã§ã¯ãªããæœè±¡åºæ¬ã¯ã©ã¹ãšããŠå®£èšããŸãã ãã®å Žåãæœè±¡åºæ¬ã¯ã©ã¹ã®æ¹ã䟿å©ã§ããããã¯ãæŠç¥ã®ãã¹ãŠã®å ·äœçãªã¯ã©ã¹ã«å ±éããåäœããªãã¡ã¯ã¿ãªã³ã°ããæ¹ãç°¡åã ããã§ãã æœè±¡åºæ¬ã¯ã©ã¹ã¯ãªã¹ã19â2ã®ããã«ãªããŸãã
ãªã¹ã19â2ã InputValidator.hã§InputValidatorã¯ã©ã¹ã宣èšãã
@interface InputValidator : NSObject { } // - (BOOL) validateInput:(UITextField *)input error:(NSError **) error; @end
validateInput: error:
ã¡ãœããã¯ãå ¥åãã©ã¡ãŒã¿ãŒãšããŠ
UITextField
ãžã®åç §ãåãå ¥ãããããå ¥åãã£ãŒã«ãã®ãã¹ãŠããã§ãã¯ãããã§ãã¯ã®çµæãšããŠ
BOOL
å€ãè¿ããŸãã ãã®ã¡ãœããã¯ã
NSError
ãžã®ãã€ã³ã¿ãŒãžã®åç §ãåãå ¥ããŸãã äœããã®ãšã©ãŒãçºçããå ŽåïŒã€ãŸããã¡ãœãããå ¥åã®æ£åœæ§ãæ€èšŒã§ããªãã£ãå ŽåïŒãã¡ãœããã¯
NSError
ã€ã³ã¹ã¿ã³ã¹ãäœæãããã€ã³ã¿ãŒã«å²ãåœãŠãŸãããããã£ãŠãæ€èšŒã¯ã©ã¹ã䜿çšãããã©ã®ãããªã³ã³ããã¹ãã§ãããã®ãªããžã§ã¯ããããšã©ãŒã«é¢ãããã詳现ãªæ å ±ãååŸã§ããŸãã
ãªã¹ã19-3ã§ç€ºãããããã«ããã®ã¡ãœããã®ããã©ã«ãå®è£ ã¯ãšã©ãŒãã€ã³ã¿ã
nil
èšå®ãã
NO
ãè¿ããŸãã
ãªã¹ã19-3ã InputValidator.mã®InputValidatorã¯ã©ã¹ã®ããã©ã«ãå®è£
#import "InputValidator.h" @implementation InputValidator // - (BOOL) validateInput:(UITextField *)input error:(NSError **) error { if (error) { *error = nil; } return NO; } @end
NSString
ãå ¥åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããªãã£ãã®ã¯ãªãã§ããïŒ ãã®å Žåãã¹ãã©ããžãŒãªããžã§ã¯ãå ã®ã¢ã¯ã·ã§ã³ã¯äžæ¹çã§ãã ã€ãŸããããªããŒã¿ãŒã¯å ã®å€ãå€æŽããã«åçŽã«ãã§ãã¯ãå®è¡ããçµæãè¿ãã ãã§ãã ã¿ã€ã
UITextField
å ¥åãã©ã¡ãŒã¿ãŒã䜿çšããŠã2ã€ã®ã¢ãããŒããçµã¿åãããããšãã§ããŸãã ã¹ãã£ã³ãªããžã§ã¯ãã¯ãããã¹ããã£ãŒã«ãã®åæå€ãå€æŽããããšãã§ããŸãïŒããšãã°ãééã£ãæåãåé€ããããšã«ãã£ãŠïŒããŸãã¯å€ãå€æŽããã«è¡šç€ºããã ãã§ãã
å¥ã®è³ªåã¯ããªããã§ãã¯ã倱æããå Žåã«
NSException
ã¹ããŒããªãã®ã§ããïŒ ããã¯ãç¬èªã®äŸå€ãã¹ããŒããŠãCocoa Touchãã¬ãŒã ã¯ãŒã¯ã®try-catchãããã¯ã§ãã£ããããããšã¯éåžžã«ãªãœãŒã¹ãæ¶è²»ããæäœã§ãããæšå¥šãããªãããã§ãïŒãã ããtry-catchã·ã¹ãã äŸå€ã¯ãŸã£ããå¥ã®åé¡ã§ãïŒã Cocoa Touchéçºè ã¬ã€ãã§æšå¥šãããŠããããã«ã
NSError
ãªããžã§ã¯ããè¿ãæ¹ãæ¯èŒçå®äŸ¡ã§ãã Cocoa Touchãã¬ãŒã ã¯ãŒã¯ã®ããã¥ã¡ã³ããèŠããšãäœããã®ç°åžžãªç¶æ³ãçºçãããšãã«
NSError
ã€ã³ã¹ã¿ã³ã¹ãè¿ãAPIãããããããããšã«æ°ä»ãã§ãããã äžè¬çãªäŸã¯ã
NSFileManager
ã¡ãœããã®1ã€ã
(BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
ã§ãã
NSFileManager
ããã¡ã€ã«ãããå Žæããå¥ã®å Žæã«ç§»åããããšãããšãã«ãšã©ãŒãçºçããå Žåãåé¡ã説æããæ°ãã
NSError
ã€ã³ã¹ã¿ã³ã¹ãäœæãããŸãã åŒã³åºãã¡ãœããã¯ãè¿ããã
NSError
ãªããžã§ã¯ãã«å«ãŸããæ å ±ã䜿çšããŠããšã©ãŒãããã«åŠçã§ããŸãã ãããã£ãŠããã®ã¡ãœããã®
NSError
ãªããžã§ã¯ãã®ç®æšã¯ãäœæ¥æåŠã«é¢ããæ å ±ãæäŸããããšã§ãã
ããã§ãé©åãªå ¥åæ€èšŒã¯ã©ã¹ã®åäœæ¹æ³ãå®çŸ©ããŸããã ããã§ãå®éã®ã¬ãã¥ãŒæ åœè ã®äœæãéå§ã§ããŸãã ãªã¹ã19-4ã§ç€ºãããããã«ãæåã«æ°åãå ¥åããããã®1ã€ãäœæããŸãããã
ãªã¹ã19-4ã NumericInputValidator.hã§NumericInputValidatorã¯ã©ã¹ã宣èšãã
#import "InputValidator.h" @interface NumericInputValidator : InputValidator { } // , , // , 0-9 - (BOOL) validateInput:(UITextField *)input error:(NSError **) error; @end
NumericInputValidator
ã¯ãæœè±¡åºæ¬ã¯ã©ã¹
InputValidator
ãç¶æ¿ãããã®
validateInput: error:
ã¡ãœããããªãŒããŒã©ã€ãããŸãã ãã®ãµãã¯ã©ã¹ãã¡ãœãããå®è£ ãŸãã¯åå®çŸ©ããããšã匷調ããããã«ãã¡ãœãããå床宣èšããŸãã ããã¯å¿ é ã§ã¯ãããŸããããè¯ãç¿æ £ã§ãã
ã¡ãœããã®å®è£ ããªã¹ã19â5ã«ç€ºããŸãã
ãªã¹ã19-5ã NumericInputValidator.mã®NumericInputValidatorã¯ã©ã¹ã®å®è£
#import "NumericInputValidator.h" @implementation NumericInputValidator - (BOOL) validateInput:(UITextField *)input error:(NSError**) error { NSError *regError = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[0-9]*$" options:NSRegularExpressionAnchorsMatchLines error:®Error]; NSUInteger numberOfMatches = [regex numberOfMatchesInString:[input text] options:NSMatchingAnchored range:NSMakeRange(0, [[input text] length])]; // , // NO if (numberOfMatches == 0) { if (error != nil) { NSString *description = NSLocalizedString(@"Input Validation Failed", @""); NSString *reason = NSLocalizedString(@"The input can contain only numerical values", @""); NSArray *objArray = [NSArray arrayWithObjects:description, reason, nil]; NSArray *keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey, NSLocalizedFailureReasonErrorKey, nil]; NSDictionary *userInfo = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray]; *error = [NSError errorWithDomain:InputValidationErrorDomain code:1001 userInfo:userInfo]; } return NO; } return YES; } @end
validateInput:error:
ã¡ãœããã®å®è£ ã¯ãäž»ã«2ã€ã®åŽé¢ã«çŠç¹ãåœãŠãŠããŸãã
- å
¥åãã£ãŒã«ãã®æ°å€ããŒã¿ãšã以åã«äœæããã
NSRegularExpression
ãªããžã§ã¯ããšã®äžèŽæ°ããã§ãã¯ããŸãã 䜿çšããæ£èŠè¡šçŸã¯ã^ [0â9] * $ãã§ãã ããã¯ãè¡å šäœã®å é ïŒã^ãã§ç€ºãããïŒããã³æ«å°ŸïŒã$ãã§ç€ºãããïŒãããæ°åã®ã¿ïŒã[0â9]ã§ç€ºãããïŒãå«ãã»ããã®0å以äžã®æåïŒã*ãã§ç€ºãããïŒãå¿ èŠã§ããããšãæå³ããŸã"ïŒã - äžèŽãããã®ããŸã£ãããªãå Žåããå
¥åã«ã¯æ°å€ã®ã¿ãå«ããããšãã§ããŸãããšããã¡ãã»ãŒãžãå«ãæ°ãã
NSError
ãªããžã§ã¯ããäœæããNSError
ãžã®å ¥åãã€ã³ã¿ãŒã«å²ãåœãŠãŸãã 次ã«ãæäœã®æåãŸãã¯å€±æã瀺ãBOOL
åã®å€ãæçµçã«è¿ããŸãã ãã®ãšã©ãŒã¯ã以äžã«ç€ºãããã«ãInputValidator
ã¯ã©ã¹ã®ããããŒãã¡ã€ã«ã§å®çŸ©ãããŠããç¹å¥ãªã³ãŒã1001ããã³ãšã©ãŒãã¡ã€ã³ã®ç¹å¥ãªå€ã«é¢é£ä»ããããŠããŸãã
static NSString * const InputValidationErrorDomain = @"InputValidationErrorDomain";
NumericInputValidator
ãšåŒã°ãããå ¥åå ã®æåã®ã¿ããã§ãã¯ãã
NumericInputValidator
ã¯ã©ã¹ã®å åŒã«ã¯ãå ¥åãã£ãŒã«ãã®å 容ããã§ãã¯ããããã®åæ§ã®ã¢ã«ãŽãªãºã ãå«ãŸããŠããŸãã
AlphaInputValidator
ã¯ã
AlphaInputValidator
ãšåãã¡ãœããããªãŒããŒã©ã€ãããŸãã ãªã¹ã19-6ã«ç€ºãããã«ãæããã«ãã®ã¢ã«ãŽãªãºã ã¯å ¥åæååã«æåã®ã¿ãå«ãŸããŠããããšãæ€èšŒããŸãã
ãªã¹ã19-6ã AlphaInputValidator.mã®AlphaInputValidatorã¯ã©ã¹ã®å®è£
#import "AlphaInputValidator.h" @implementation AlphaInputValidator - (BOOL) validateInput:(UITextField *)input error:(NSError**) error { NSError *regError = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^[a-zA-Z]*$" options:NSRegularExpressionAnchorsMatchLines error:®Error]; NSUInteger numberOfMatches = [regex numberOfMatchesInString:[input text] options:NSMatchingAnchored range:NSMakeRange(0, [[input text] length])]; // , // NO if (numberOfMatches == 0) { if (error != nil) { NSString *description = NSLocalizedString(@"Input Validation Failed", @""); NSString *reason = NSLocalizedString(@"The input can contain only letters", @""); NSArray *objArray = [NSArray arrayWithObjects:description, reason, nil]; NSArray *keyArray = [NSArray arrayWithObjects:NSLocalizedDescriptionKey, NSLocalizedFailureReasonErrorKey, nil]; NSDictionary *userInfo = [NSDictionary dictionaryWithObjects:objArray forKeys:keyArray]; *error = [NSError errorWithDomain:InputValidationErrorDomain code:1002 userInfo:userInfo]; } return NO; } return YES; } @end
AlphaInputValidator
ã¯ã©ã¹ã
InputValidator
ããªãšãŒã·ã§ã³ã§ããã
validateInput:
ã¡ãœãããå®è£ ããŠããŸãã
NSRegularExpression
ãªããžã§ã¯ãã§å¥ã®æ£èŠè¡šçŸã䜿çšãããšã©ãŒã³ãŒããšã¡ãã»ãŒãžãæåæ€èšŒã«åºæã§ããããšãé€ããŠãå åŒã®ãããª
NumericInputValidator
ãã³ãŒãæ§é ãããã³ã¢ã«ãŽãªãºã ããããŸãã æåã®ãã¹ãã«äœ¿çšããæ£èŠè¡šçŸã¯ã^ [a-zA-Z] * $ãã§ãã æå¹ãªæåã®ã»ããã«å°æåãšå€§æåã®äž¡æ¹ãå«ãŸããŠããããšãé€ããŠã圌ã®ä»²éã®æ°å€æ€èšŒã®è¡šçŸã®ããã«èŠããŸãã ã芧ã®ãšãããã©ã¡ãã®ããŒãžã§ã³ã«ãå€ãã®éè€ã³ãŒãããããŸãã äž¡æ¹ã®ã¢ã«ãŽãªãºã ã®æ§é ã¯äŒŒãŠããŸãã æ§é ããã³ãã¬ãŒãã¡ãœããïŒç¬¬18ç« ãåç §ïŒã«æœè±¡åããŠãåºæ¬ã¯ã©ã¹ã«ãªãã¡ã¯ã¿ãªã³ã°ã§ããŸãã
InputValidator
ç¹å®ã®ãµãã¯ã©ã¹ã¯ã
InputValidator
å®çŸ©ãããããªããã£ãæäœããªãŒããŒã©ã€ãããŠãäžæã®æ å ±ããã³ãã¬ãŒãã¢ã«ãŽãªãºã ã«è¿ããŸããããšãã°ã
NSError
ãªããžã§ã¯ãã®æ£èŠè¡šçŸãããŸããŸãªæ§ç¯å±æ§ãªã©ã§ããããã¯æŒç¿ãšããŠæ®ããŸãã
ããã§ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããæ€èšŒã¯ã©ã¹ããã§ã«çšæãããŸããã ãã ãã
UITextFiel
dã¯ãããã«ã€ããŠèªèããŠããªãããããã¹ãŠãç解ããç¬èªã®ããŒãžã§ã³ã®
UITextField
ãå¿ èŠã§ãã ãªã¹ã19-7ã«ç€ºãããã«ã
InputValidator
ãžã®åç §ãš
validate
ã¡ãœãããå«ã
UITextField
ãµãã¯ã©ã¹ãäœæããŸãã
ãªã¹ã19-7ã CustomTextField.hã®CustomTextFieldã¯ã©ã¹å®£èš
#import "InputValidator.h" @interface CustomTextField : UITextField { @private InputValidator *inputValidator_; } @property (nonatomic, retain) IBOutlet InputValidator *inputValidator; - (BOOL) validate; @end
CustomTextField
ã¯ã
InputValidator
ãžã®
retain
åç §ã
retain
ããããã£ãå«ãŸããŠããŸãã
validate
ã¡ãœãããåŒã³åºããããšã
InputValidator
ãžã®åç §ã䜿çšããŠæ€èšŒãéå§ãããŸãã ãªã¹ã19â8ã«ç€ºãå®è£ ã§ããã確èªã§ããŸãã
ãªã¹ã19-8ã CustomTextField.mã®CustomTextFieldã¯ã©ã¹ã®å®è£
#import "CustomTextField.h" @implementation CustomTextField @synthesize inputValidator=inputValidator_; - (BOOL) validate { NSError *error = nil; BOOL validationResult = [inputValidator_ validateInput:self error:&error]; if (!validationResult) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[error localizedDescription] message:[error localizedFailureReason] delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles:nil]; [alertView show]; [alertView release]; } return validationResult; } - (void) dealloc { [inputValidator_ release]; [super dealloc]; } @end
ã¡ãã»ãŒãž
[inputValidator_ validateInput:self
error:&error]
ã
validate
ã¡ãœããã§éä¿¡ãããŸã
[inputValidator_ validateInput:self
error:&error]
[inputValidator_ validateInput:self
error:&error]
ãªã³ã¯
inputValidator_
ã ãã¿ãŒã³ã®
CustomTextField
ã¯ã
CustomTextField
ã䜿çšãã
InputValidator
ã¿ã€ããã¢ã«ãŽãªãºã ã®è©³çŽ°ãç¥ãå¿ èŠããªãããšã§ãã ãããã£ãŠãå°æ¥ãæ°ãã
InputValidator
ãè¿œå ããå Žåã
CustomTextField
ãªããžã§ã¯ãã¯åãæ¹æ³ã§æ°ãã
InputValidator
ã䜿çšããŸãã
ãããã£ãŠãæºåäœæ¥ã¯ãã¹ãŠå®äºããŸããã ãªã¹ã19-9ã«ç€ºãããã«ãã¯ã©ã€ã¢ã³ãã
UITextFieldDelegate
ãããã³ã«ãå®è£ ããã¿ã€ã
CustomTextField
2ã€ã®
IBOutlets
å«ã
IBOutlets
ãããšã
CustomTextField
ã
ãªã¹ã19-9ã StrategyViewController.hã®StrategyViewControllerã¯ã©ã¹å®£èš
#import "NumericInputValidator.h" #import "AlphaInputValidator.h" #import "CustomTextField.h" @interface StrategyViewController : UIViewController <UITextFieldDelegate> { @private CustomTextField *numericTextField_; CustomTextField *alphaTextField_; } @property (nonatomic, retain) IBOutlet CustomTextField *numericTextField; @property (nonatomic, retain) IBOutlet CustomTextField *alphaTextField; @end
ã³ã³ãããŒã©ãŒã«ããªã²ãŒãã¡ãœãã
(void)textFieldDidEndEditing:(UITextField *)textField
ãå®è£ ãããããã«ãã§ãã¯ãå ¥ããããšã«ããŸããã ãã®ã¡ãœããã¯ãå ¥åãã£ãŒã«ãã®å€ãå€æŽããããã©ãŒã«ã¹ã倱ããããã³ã«åŒã³åºãããŸãã ãŠãŒã¶ãŒãå ¥åãçµäºãããšããªã¹ã19-10ã«ç€ºãããã«ã
CustomTextField
ã¯ã©ã¹ã¯ãã®ããªã²ãŒãã¡ãœãããåŒã³åºããŸãã
ãªã¹ã19-10ã ããªã²ãŒãã¡ãœããtextFieldDidEndEditingïŒã§å®çŸ©ãããã¯ã©ã€ã¢ã³ãã³ãŒãã¯ãã¹ãã©ããžãŒãªããžã§ã¯ãïŒInputValidatorïŒã䜿çšããŠCustomTextFieldã®ã€ã³ã¹ã¿ã³ã¹ãæ€èšŒããŸãã
@implementation StrategyViewController @synthesize numericTextField, alphaTextField; // ... // // ... #pragma mark - #pragma mark UITextFieldDelegate methods - (void)textFieldDidEndEditing:(UITextField *)textField { if ([textField isKindOfClass:[CustomTextField class]]) { [(CustomTextField*)textField validate]; } } @end
textFieldDidEndEditing:
åŒã³åºããšã
textFieldDidEndEditing:
ãã£ãŒã«ãã®1ã€ã§ç·šéãå®äºãããšããã®ã¡ãœããã¯
textField
ãªããžã§ã¯ãã
CustomTextField
ã¯ã©ã¹ã«å±ããŠããããšã確èªããŸãã ãããããªãã圌ã¯å ¥åãããããã¹ãããã§ãã¯ããããã»ã¹ãéå§ããããã«åœŒã«
validate
ã¡ãã»ãŒãžãéä¿¡ããŸãã ã芧ã®ãšããããããã®æ¡ä»¶ã¹ããŒãã¡ã³ãã¯ããå¿ èŠãããŸããã 代ããã«ãåãç®çã®ããã®ã¯ããã«åçŽãªã³ãŒãããããŸãã
textField
ã
CustomTextField
ã§ããããšãããã«ç¢ºèªããããšãé€ããŠããã以äžè€éãªããšã¯ãããŸããã
ããããã¡ãã£ãšåŸ ã£ãŠãã ããã äœããããŸãè¯ãèŠããŸããã
StrategyViewController
å®çŸ©ãããŠãã
InputValidator numericTextField_
ããã³
alphaTextField_
æ£ãã
InputValidator numericTextField_
ã€ã³ã¹ã¿ã³ã¹ãã©ã®ããã«å²ãåœãŠãããšãã§ããŸããïŒ ãªã¹ã19-9
IBOutlet
ãäž¡æ¹ã®å ¥åãã£ãŒã«ãã
IBOutlet
ãšããŠå®£èšãããŠããŸãã ä»ã®ãã¿ã³ãªã©ãšåæ§ã«ã
IBOutlet
ãä»ããŠInterface Builder View Controllerã§ããããéžæã§ããŸãã åæ§ã«ããªã¹ã19â7ã®
CustomTextField
ã¯ã©ã¹ã®å®£èšã§ã¯ããã®
inputValidator
ããããã£ã
IBOutlet
ã§ãããããInterface Builderã§
*TextField
ãªããžã§ã¯ãã«ã
InputValidator
ã€ã³ã¹ã¿ã³ã¹ãå²ãåœãŠãããšãã§ããŸãããã®ããã«ãç¹å®ã®ã¯ã©ã¹ããããã£ããšããŠå®£èšãããšãInterface Builderã®åç §ãªã³ã¯ã䜿çšããŠãã¹ãŠãæ§ç¯ã§ããŸã
IBOutlet
ãã«ã¹ã¿ã Interface Builderãªããžã§ã¯ãã®äœ¿çšæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯
CoordinatingController
ã第11ç« ã®ãInterface Builderã§ã®äœ¿çšããåç §ããŠãã ãããMediatorãã¿ãŒã³ã«ã€ããŠèª¬æããŠããŸãã
ãããã«
ãã®ç« ã§ã¯ãæŠç¥ãã¿ãŒã³ã®æŠå¿µãšãã¯ã©ã€ã¢ã³ããããŸããŸãªé¢é£ã¢ã«ãŽãªãºã ã䜿çšããããã«ãã®ãã¿ãŒã³ã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸãããã«ã¹ã¿ã ãã§ãã¯ã®å ¥åãã§ãã¯ã®å®è£ äŸã¯ã
UITextField
ããŸããŸãªãã§ãã¯ã¯ã©ã¹ããªããžã§ã¯ãã®ãå éšããã©ã®ããã«å€æŽã§ãããã瀺ããŠããŸããStrategyãã¿ãŒã³ã¯ãDecoratorãã¿ãŒã³ã«å€å°äŒŒãŠããŸãïŒ16ç« ãšä»¥åã®èšäºïŒããã³ã¬ãŒã¿ã¯ãªããžã§ã¯ãã®åäœãå€éšããæ¡åŒµããããŸããŸãªæŠç¥ããªããžã§ã¯ãå ã«ã«ãã»ã«åãããŸãã圌ããèšãããã«ããã³ã¬ãŒã¿ã¯ãªããžã§ã¯ãã®ãã¹ãã³ããšæŠç¥ããã€ã³ãµã€ãããå€æŽããŸãã
次ã®ç« ã§ã¯ãã¢ã«ãŽãªãºã ã®ã«ãã»ã«åã«é¢é£ããå¥ã®ãã¿ãŒã³ãèŠãŠãããŸããã«ãã»ã«åãããã¢ã«ãŽãªãºã ã¯ãäž»ã«åå¥ã®ãªããžã§ã¯ããšããŠã³ãã³ãã®é 延å®è¡ã«äœ¿çšãããŸãã