рд░рдгрдиреАрддрд┐ (рдХрд╛рд░реНрд▓реЛ рдЪреБрдВрдЧ рджреНрд╡рд╛рд░рд╛ "рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди" рдкреБрд╕реНрддрдХ рд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдЕрдзреНрдпрд╛рдп "рд░рдгрдиреАрддрд┐" рдХрд╛ рдЕрдиреБрд╡рд╛рдж)

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЖрдкрдиреЗ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЕрдЧрд░-рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЕрдиреНрдп / рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рд╕реНрдкреЗрдЧреЗрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╡рд░реНрдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ / рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрдирдкреБрдЯ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CGFloat , NSString , NSInteger , рдЖрджрд┐)ред рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рддреНрдпрд╛рдкрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдЧрд░-рдФрд░ / рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдХреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЛ рд░рдгрдиреАрддрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдПрдХ UITextField рдкрд╛рда рдХреНрд╖реЗрддреНрд░ UITextField рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдПрдХ рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рд╣реИ?


рдЗрд╕ рдкреИрдЯрд░реНрди рдореЗрдВ рдореБрдЦреНрдп рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд░рдгрдиреАрддрд┐ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рднрд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╕рднреА рд╕рдорд░реНрдерд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреА рд╣реИред рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рднреА рд╣реИрдВ рдЬреЛ рд░рдгрдиреАрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдВрджрд░реНрдн рд╡рд╕реНрддреБ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдгрдиреАрддрд┐ рд╡рд╕реНрддреБ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рдгрдиреАрддрд┐ рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рдВрдмрдВрдз рдХреЛ рдЪрд┐рддреНрд░ 191 рдореЗрдВ рд╡рд░реНрдЧ рдЖрд░реЗрдЦ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЫрд╡рд┐
рдЪрд┐рддреНрд░ 19-1ред рдХрдХреНрд╖рд╛ рд╕рдВрд░рдЪрдирд╛ рдкреИрдЯрд░реНрди рд░рдгрдиреАрддрд┐

рдПрдХ рд╕рдореВрд╣ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо, ConcreteStrategy рдХреНрд▓рд╛рд╕реЗрд╕ (рдП, рдмреА рдФрд░ рд╕реА) рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп algorithmInterface рд╕рд╛рдЭрд╛ algorithmInterface , рдЗрд╕рд▓рд┐рдП Context рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред

рдиреЛрдЯред рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди : рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдирд┐рдореЗрдп рдмрдирд╛рддрд╛ рд╣реИред рд░рдгрдиреАрддрд┐ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред *

рдЧреЛрдл рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди (рдПрдбрд┐рд╕рди-рд╡реЗрд╕реНрд▓реЗ, 1994) рдореЗрдВ рджреА рдЧрдИ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ред

рдПрдХ Context рдЙрджрд╛рд╣рд░рдг рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╡рд┐рднрд┐рдиреНрди ConcreteStrategy рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ Context рд╡рд╕реНрддреБ рдХреЗ "рдЗрдирд╕рд╛рдЗрдб" рдореЗрдВ рдмрджрд▓рд╛рд╡ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрджрд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВред рдбреЗрдХреЛрд░реЗрдЯрд░ (рдЕрдзреНрдпрд╛рдп 16, рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди рдФрд░ рдореЗрд░рд╛ рдкрд┐рдЫрд▓рд╛ рд▓реЗрдЦ рджреЗрдЦреЗрдВ), рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА "рддреНрд╡рдЪрд╛" рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдбреЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЕрдВрддрд░ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрдзреНрдпрд╛рдп 16 (рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ) рдореЗрдВ "рдЗрдирд╕рд╛рдЗрдб" рдХреЛ рдмрджрд▓рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА "рддреНрд╡рдЪрд╛" рдмрджрд▓рдирд╛ "рдЦрдВрдб" рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВред

рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди

рдореЙрдбрд▓-рд╡реНрдпреВ-рдХрдВрдЯреНрд░реЛрд▓рд░ рдкреИрдЯрд░реНрди рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдореЗрдВ рдореМрдЬреВрдж рдбреЗрдЯрд╛ рдХреЛ рдХрдм рдФрд░ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рджреГрд╢реНрдп рд╕реНрд╡рдпрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЬрдм рддрдХ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде, рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЕрдиреНрдп рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдПрдХ рджреГрд╢реНрдп рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдгрдиреАрддрд┐ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рджреГрд╢реНрдп рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдЙрдЪрд┐рдд рд╣реИ?


рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдЪрд┐рдд рд╣реИ:


UITextField рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЖрдЗрдП рдЖрд╡реЗрджрди рдореЗрдВ рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХреБрдЫ UITextField рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ; рд╣рдо рдмрд╛рдж рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ, - a - z рдпрд╛ A - Z, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝реАрд▓реНрдб рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ, 0тАУ9ред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЗрдирдкреБрдЯ рд╕рд╣реА рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдСрди-рд╕рд╛рдЗрдЯ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ UITextField , textFieldDidEndEditing: рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ textFieldDidEndEditing: рдПрдХ UITextField рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдЬрд┐рдЯрд▓ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдПрдВ рджрд░реНрдЬ рдХреА рдЧрдИ рд╣реИрдВ, рдФрд░ рдХреЗрд╡рд▓ рдЕрдХреНрд╖рд░ рдЕрд▓реНрдлрд╛рдмреЗрдЯрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ ( textField рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ) рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЛ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕реА рд╣реИ?

рдЯреНрд░реЗрдЬрд┐рдпрд╛ рдкреИрдЯрд░реНрди рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдПрдХ рдХреЛрдб рдореЗрдВ рдЖрдП рд╣реЛрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-1 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19тАУ1ред рд╡рд┐рд╢рд┐рд╖реНрдЯ UITextField рд╕рд╛рдордЧреНрд░реА рдбреЗрд▓рд┐рдЧреЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдЯреЗрдХреНрд╕реНрдЯFieldDidEndEditing рдореЗрдВ
 - (void)textFieldDidEndEditing:(UITextField *)textField { if (textField == numericTextField) { //  [textField text]  , //    } else if (textField == alphaTextField) { //  [textField text]  , //      } } 


рдмреЗрд╢рдХ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рд╣реЛрдиреЗ рдкрд░ рдЕрдзрд┐рдХ рд╕рд╢рд░реНрдд рдмрдпрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЗрди рд╕рднреА рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрдиреАрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпреБрдХреНрддрд┐: рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╢рд░реНрдд рд╡рдХреНрддрд╡реНрдп рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдФрд░ рд░рдгрдиреАрддрд┐ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЕрдм рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдЗрд╕ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреЛ рд▓реЗрдирд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдмрд┐рдЦреЗрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╣рдорд╛рд░реА рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рд╕реЗ рдПрдХ рдкрдВрдХреНрддрд┐ рд▓реЗрддреА рд╣реИ, рдлрд┐рд░ рд╡рд╛рдВрдЫрд┐рдд рд░рдгрдиреАрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рдЬрд╛рдВрдЪрддреА рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ BOOL рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ рдФрд░ рдЪреЗрдХ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ NSError рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред рд▓реМрдЯрд╛ рд╣реБрдЖ NSError рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реБрдЖред рдЪреВрдВрдХрд┐ рдбрд┐рдЬрд┐рдЯрд▓ рдФрд░ рдЕрдХреНрд╖рд░ рджреЛрдиреЛрдВ рдЗрдирдкреБрдЯ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реИрдВ), рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕реЗрдЯ рдЪрд┐рддреНрд░ 19-2 рдореЗрдВ рдХрдХреНрд╖рд╛ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЫрд╡рд┐
рдЪрд┐рддреНрд░ 19тАУ2ред рд╡рд░реНрдЧ рдЖрд░реЗрдЦ CustomTextField рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдореВрд░реНрдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рднреА рдареЛрд╕ рд╡рд░реНрдЧреЛрдВ рдХреА рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдорд╛рд░рд╛ рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-2 рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19тАУ2ред InputValidator.h рдореЗрдВ рдПрдХ InputValidator рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛
 @interface InputValidator : NSObject { } //      - (BOOL) validateInput:(UITextField *)input error:(NSError **) error; @end 


UITextField validateInput: error: рд╡рд┐рдзрд┐ рдПрдХ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ UITextField рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЪреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк BOOL рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдПрдХ NSError рдХреЛ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рдЬрдм рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реБрдИ (рдЕрд░реНрдерд╛рдд, рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХреА), рддреЛ рд╡рд┐рдзрд┐ NSError рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧреА рдФрд░ рдЗрд╕реЗ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧреА, рдЗрд╕рд▓рд┐рдП, рдЬрд┐рд╕ рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдХ рдХреЛ nil рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ NO рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ 19-3 рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 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 рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде UITextField рд╣рдо рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реНрдХреИрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд▓рдд рд╡рд░реНрдгреЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░) рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреА рдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдореВрд▓реНрдп рджреЗрдЦ рд╕рдХрддреА рд╣реИред

рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЪреЗрдХ рдлреЗрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдо рд╕рд┐рд░реНрдл NSException рдХреНрдпреЛрдВ рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ? рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдФрд░ рдХреЛрдХреЛ рдЯрдЪ рдлреНрд░реЗрдо рдореЗрдВ рдПрдХ рдХреЛрд╢рд┐рд╢-рдХреИрдЪ рдмреНрд▓реЙрдХ рдореЗрдВ рдЗрд╕реЗ рдкрдХрдбрд╝рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдСрдкрд░реЗрд╢рди рд╣реИ рдФрд░ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдХреЛрд╢рд┐рд╢-рдХреИрдЪ рд╕рд┐рд╕реНрдЯрдо рдЕрдкрд╡рд╛рдж рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ)ред рдХреЛрдХреЛ рдЯрдЪ рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб рдореЗрдВ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ NSError рд╡рд╕реНрддреБ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХреЛрдХреЛрдЖ рдЯрдЪ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрдИ рдПрдкреАрдЖрдИ рдРрд╕реЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреЗ рдкрд░ NSError рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг NSFileManager рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error ред рдпрджрд┐ NSFileManager рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдПрдХ рдирдпрд╛ NSError рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрдЧреЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯреЗ NSError рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдореЗрдВ NSError рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рдХреНрд╖реНрдп рдХрд╛рдо рдХреЗ рдЗрдирдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред

рдЕрдм рд╣рдордиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреЗ рдЗрдирдкреБрдЯ рд╕рддреНрдпрд╛рдкрди рд╡рд░реНрдЧ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдореАрдХреНрд╖рдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдкрд╣рд▓реЗ рдЗрдирдкреБрдЯ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдирд╛рдПрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-4 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-4ред NumericInputValidator.h рдореЗрдВ рдПрдХ NumericInputValidator рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛
 #import "InputValidator.h" @interface NumericInputValidator : InputValidator { } //  ,  ,     // ,   0-9 - (BOOL) validateInput:(UITextField *)input error:(NSError **) error; @end 


NumericInputValidator рдЕрдореВрд░реНрдд рдЖрдзрд╛рд░ рд╡рд░реНрдЧ NumericInputValidator рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА NumericInputValidator рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ 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: рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди validateInput:error: рд╡рд┐рдзрд┐ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджреЛ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ:

  1. рдпрд╣ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП NSRegularExpression рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдХреЗ рдореИрдЪреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "^ [0тАУ9] * $" рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдкреВрд░реНрдг рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ ("^" рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд) рдФрд░ рдЕрдВрдд ("$" рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рд╕реЗрдЯ рд╕реЗ 0 рдпрд╛ рдЕрдзрд┐рдХ рд╡рд░реНрдг ("*" рджреНрд╡рд╛рд░рд╛) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдВрдХ ("0/9) рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред ")ред
  2. рдпрджрд┐ рдХреЛрдИ рдореЗрд▓ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╡рд╣ рдПрдХ рдирдпрд╛ NSError рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ "рдЗрдирдкреБрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ" рдФрд░ рдЗрд╕реЗ NSError рдПрдХ рдЗрдирдкреБрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдЕрдВрддрддрдГ рдкреНрд░рдХрд╛рд░ BOOL рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреА рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рд╡рд┐рд╢реЗрд╖ рдХреЛрдб 1001 рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ рдФрд░ InputValidator рд╡рд░реНрдЧ рдХреЗ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐ рдбреЛрдореЗрди рдХреЗ рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
     static NSString * const InputValidationErrorDomain = @"InputValidationErrorDomain"; 

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 рд╡рд░реНрдЧ рднреА AlphaInputValidator рдПрдХ рдкреНрд░рдХрд╛рд░ AlphaInputValidator рдФрд░ AlphaInputValidator рд╡рд┐рдзрд┐ validateInput: рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рднрд╛рдИ-рдЬреИрд╕рд╛, NumericInputValidator , рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ NSRegularExpression рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдФрд░ рд╕рдВрджреЗрд╢ рдкрддреНрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рд╣рдо рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, "^ [a-zA-Z] * $" рд╣реИред рдпрд╣ рдЙрдирдХреЗ рд╕рд╛рдереА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╡реИрдз рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рдирд┐рдЪрд▓реЗ рдФрд░ рдКрдкрд░реА рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдХреНрд╖рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рд╣реИрдВред рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╣реИ; рдЖрдк рдПрдХ рдЯреЗрдВрдкрд▓реЗрдЯ рд╡рд┐рдзрд┐ (рдЕрдзреНрдпрд╛рдп 18 рджреЗрдЦреЗрдВ) рдХреЛ рдПрдХ рд╕рд╛рд░ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред InputValidator рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрд╡рд░реНрдЧ InputValidator рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП InputValidator рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрджрд┐рдо рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NSError рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдЖрджрд┐ред рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛ред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рддреНрдпрд╛рдкрди рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, UITextFiel d рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ UITextField рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдм рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реИред рд╣рдо UITextField рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ InputValidator рдФрд░ validate рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-7 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-7ред CustomTextField рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ CustomTextField.h рдореЗрдВ
 #import "InputValidator.h" @interface CustomTextField : UITextField { @private InputValidator *inputValidator_; } @property (nonatomic, retain) IBOutlet InputValidator *inputValidator; - (BOOL) validate; @end 


CustomTextField рдореЗрдВ рдПрдХ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ InputValidator рд╕рдВрджрд░реНрдн рд░рдЦрддреА рд╣реИред рдЬрдм рдЗрд╕рдХреА validate рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП InputValidator рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ 198 рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 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 рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ InputValidator рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХреЛрдИ рд╡рд┐рд╡рд░рдгред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдо рдХреБрдЫ рдирдП InputValidator рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ CustomTextField рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдирдП InputValidator рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

рд▓рд┐рд╣рд╛рдЬрд╛, рдкреВрд░реА рддреИрдпрд╛рд░реА рдХреА рдЧрдИ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ UIViewController рд╣реИ рдЬреЛ UITextFieldDelegate рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ CustomTextField рдкреНрд░рдХрд╛рд░ рдХреЗ рджреЛ IBOutlets рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-9 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 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 рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред (void)textFieldDidEndEditing:(UITextField *)textField рдФрд░ рд╡рд╣рд╛рдБ рдЬрд╛рдБрдЪ рдбрд╛рд▓реЗрдВред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╣рд░ рдмрд╛рд░ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлреЛрдХрд╕ рдЦреЛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ CustomTextField рд╡рд░реНрдЧ рдЗрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╕реВрдЪреА 19-10 рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 19-10ред рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛрдб рдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ редFieldDidEndEditing :, рдЬреЛ рдПрдХ рд░рдгрдиреАрддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ (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: рдЬрдм рдЦреЗрддреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдпрд╣ textField рдХрд┐ textField рдСрдмреНрдЬреЗрдХреНрдЯ CustomTextField рд╡рд░реНрдЧ рдХрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреА рдЬрд╛рдВрдЪ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдПрдХ validate рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдм рдЗрди рд╕рд╢рд░реНрдд рдмрдпрд╛рдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд░рд▓ рдХреЛрдб рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдБрдЪ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ textField рдПрдХ CustomTextField , рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдПрдХ рдкрд▓ рд░реБрдХрд┐рдПред рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рд╣рдо рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╕рд╣реА InputValidator numericTextField_ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХреЗ InputValidator numericTextField_ рдФрд░ alphaTextField_ рдХреЛ StrategyViewController рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд? рджреЛрдиреЛрдВ рдЗрдирдкреБрдЯ рдлреАрд▓реНрдбреНрд╕ рдХреЛ IBOutlet рдХреЛ Listing 199 рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ IBOutlet рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЕрдиреНрдп рдмрдЯрди рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ inputValidator рдореЗрдВ CustomTextField рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ, рдЗрд╕рдХреА inputValidator рд╕рдВрдкрддреНрддрд┐ рдПрдХ IBOutlet рднреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо inputValidator рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ *TextField рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рднреА рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдм рдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рд╕рдВрджрд░реНрдн рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ IBOutletред рдХрд╕реНрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, CoordinatingControllerрдЕрдзреНрдпрд╛рдп 11 рдореЗрдВ "рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛" рджреЗрдЦреЗрдВ , рдЬреЛ рдордзреНрдпрд╕реНрде рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдордиреЗ рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдмрдВрдзрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдПрдХ рдХрд╕реНрдЯрдо рдПрдХ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдЬрд╛рдВрдЪ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг UITextFieldрджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдЧ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ "рдЖрдВрддрд░рд┐рдХ" рдХреЛ рдХреИрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд░рдгрдиреАрддрд┐ рдкреИрдЯрд░реНрди рдХреБрдЫ рд╣рдж рддрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдкреИрдЯрд░реНрди (рдЕрдзреНрдпрд╛рдп 16 рдФрд░ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ) рдХреЗ рд╕рдорд╛рди рд╣реИред рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдмрд╛рд╣рд░ рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдмрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЛ рд╡рд╕реНрддреБ рдХреЗ рднреАрддрд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рд╡рд╕реНрддреБ рдХреА "рддреНрд╡рдЪрд╛" рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ - "рдЕрдВрджрд░реВрдиреА"ред

рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо рдПрдХ рдФрд░ рдкреИрдЯрд░реНрди рджреЗрдЦреЗрдВрдЧреЗ, рдЬреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╕реЗ рднреА рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In222355/


All Articles