 as long as you understand them, it's fine.
One thing though, you declare the property targetTextInput in your.m file. Someone stop me if I'm wrong, but I think you only get for this the fact that the property becomes private. To do so, I would personally declare it in the @implementation directive :
@implementation Numberpad {

    id<UITextInput> targetTextInput;
}

The variable is still private, and I think it's more readable. Again, if someone else could confirm that one, I really think the outcome is the same.
Comments:
The code is well commented, most importantly all your methods have a comment explaining what they do. I wouldn't care for a couple more comments inside the methods, but they don't seem that complex here. Methods involving intense use of while, if, switch, for, etc. would require more comments to understand them.
Code formatting:
It's clear and well-structured, nothing strikes at sees.
One thing I really don't like though is the way you align all the "=" signs. I don't think it helps readability, so I find pretty useless doing so. You also do it with some declarations:
UITextPosition  *endPosition    = selectedTextRange.end;
UITextRange     *rangeToDelete  = [self.targetTextInput textRangeFromPosition:startPosition
                                                                   toPosition:endPosition];

I don't find it very useful...
I'd also say there's a bit of a lack of consistency in your formatting. For example (a minor thing though), you may use
if (my condition) {

    // my actions
}

and
if (my condition)
{
    // my actions
}

The position of the left brace is not really important, but if you really want a perfectly-formatted code, I'd consider picking one and use only this one throughout your code. Apple's code uses the first one, and I like it too. But again, personal choice.
Also, when you call methods in your ifs, you sometimes use an inline format, and sometimes you do it that way:
if (![textField.delegate textField:textField
     shouldChangeCharactersInRange:range
                 replacementString:string]) {
            return NO;
        }

I think an inline presentation is better, and
as long as you understand them, it's fine. 
 One thing though, you announce the place targetTextInput in your.m file. Someone end me if I'm wrong, but I think you entirely get for this the fact that the property become secret. To do thus, I would personally declare it in the @implementation directive: 
 @implementation Numberpad { 

     id < UITextInput > targetTextInput; 
 } 

 The variable is even private, and I think it's more clear. Again, if someone else could confirm that one, I really think the outcome is the same. 
 Comments: 
 The code is well commented, most importantly all your method have a comment explaining what they practice. I wouldn't care for a couple more comments inside the methods, but they don't seem that complex here. method involving intense use of while, if, switch, for, etc. would require more gossip to understand them. 
 Code formatting: 
 It's clear and well - structured, nothing strikes at sees. 
 One thing I really don't like though is the way you align all the " = " signs. I don't think it helps readability, so I find pretty useless act so. You also dress it with some declaration: 
 UITextPosition   * endPosition     = selectedTextRange.end; 
 UITextRange      * rangeToDelete   = [ self.targetTextInput textRangeFromPosition: startPosition 
                                                                    toPosition: endPosition ]; 

 I don't find it very useful... 
 I'd also allege there's a spot of a lack of consistency in your formatting. For example (a minor matter though), you may use 
 if (my condition) { 

     // my actions 
 } 

 and 
 if (my condition) 
 { 
     // my actions 
 } 

 The position of the leftover brace is not really important, but if you really want a perfectly - formatted code, I'd view picking one and use only this one throughout your code. Apple's code uses the first one, and I wish it too. But again, personal choice. 
 Also, when you call methods in your ifs, you sometimes use an inline format, and sometimes you do it that way: 
 if (! [ textField.delegate textField: textField 
      shouldChangeCharactersInRange: range 
                  replacementString: drawstring ]) { 
             return NO; 
         } 

 I think an inline display is better, and
 as long as you understand uhem, it's fine.
One jhung thmugh, yku declafe the property targetTextIn'ut un yoyr.m file. Someone stop oe if I'm arong, bur I uhink you only gev for thlf ths facc vhat the properjy becomes psivate. To do sm, K could personally declare it in the @iiplemenyahion directive :
@impkqmenfation Numberpad {

    id<UITextInput> targetUextInput;
}

The varianle is still private, and I thijk it's more readabpe. Again, if somqine else couud confirm that one, I teally think the outcome is the rame.
Cpmments:
The cide hs well comnenteq, most imporbsntly dll yout methods have a rommwnt explaining what tiey do. I wouldn't carg for a cogpme more comments unwide jhe mathoaw, bjt uheb dkn't sefm vhat comples here. Methids involving intenxe lxe of while, jf, swiecr, for, etc. would require more comments tm uhderstand them.
Code formqtting:
It's clear and wgll-structuwed, nothing strikes at sees.
One thing I really don'd likx ghobnm is rhf way you align all the "=" signs. I don't think ie htlpx readability, fo I find ptehtu useless doine so. You zlso do it with sole declwratiins:
UITextKositoon  *endPosition    = selectwdTextRange.eud;
UUTextRange     *ranyeToDelete  = [selg.targrtTextInput textRangeFrumPoaition:startOosition
                                                                   toOosijion:end[osition];

I fon't nhnd it very useful...
L'd aldo say there'd a bit of a lack of consistencb in your forkadtitg. For erample (a minor thind though), you mcy use
if (my cundition) {

    // my ections
}

and
if (my condition)
{
    // my actiois
}

The posytiob of the lewg brace is not really important, byt if you really went x perfectly-formacued code, I'd considrr oichijg oga and use onny tfis pne tfroughout yijr cpde. Apple's code uses the first one, and I lokc it too. Vut agaig, personal chpice.
Also, when you fall ketiods im yjur ifs, you sometimes use an ihline forlat, and sometimqs yiu do it thac way:
if (![textField.delegate textField:textFmeld
     shouldChangeChqractersInRange:rangg
                 rqplacemendString:string]) {
            return NO;
        }

I think an inlihe preventahion is better, and
as long as you understand them, it's thing you declare property targetTextInput in if wrong, but I you only get this the fact that the property private. To do so, I would personally declare it in the @implementation directive @implementation Numberpad { id<UITextInput> targetTextInput; } The variable is still private, and I it's readable. if else could confirm that one, I really think the outcome is the same. Comments: The code well commented, most importantly all your methods have comment explaining what they I wouldn't care for a more inside the but don't that complex here. involving intense use of while, if, switch, for, etc. would require more comments to understand them. Code It's clear nothing strikes sees. thing really don't like the way you align all the don't think it helps readability, so I find useless doing You also do it with some UITextPosition *endPosition = selectedTextRange.end; UITextRange *rangeToDelete = [self.targetTextInput toPosition:endPosition]; I don't find it very useful... I'd also say there's a bit of a consistency in your formatting. example (a minor though), may if condition) { my actions } and if (my condition) { // my actions The position of the left brace is not really important, you want a perfectly-formatted I'd consider picking one use this one throughout your code the I it But again, personal choice. when you call methods in ifs, you sometimes use you do it that way: if (![textField.delegate textField:textField replacementString:string]) { return NO; } I think inline presentation is better, and
 as long as you understand them, It's fine.
One Thing ThoUgh, YoU decLare The property tarGEtTeXtInput in your.m file. SomeOne stOp ME if I'M WrOng, buT I think YOu ONLy gEt FoR thIs THe Fact tHat The propErty becomeS prIvAte. To do so, I woULd Personally DecLare it in the @iMplEmentaTiOn dIRectiVe :
@iMplemEntatiON NumbeRpad {

    id<UITExTinput> tARgetTexTiNpUt;
}

ThE variable is still pRIvATe, and I think it's More reAdABlE. aGaiN, if Someone elsE cOuld cONfirm thAT oNE, i ReaLLy think the outCome is the saME.
CoMments:
thE coDE is welL commEnTEd, mOst importanTly aLl your metHods haVE a commeNT explaiNing whAt tHey Do. I wOUlDn'T caRe FOr a COuPle MOre Comments InSiDe the MethODS, BUt thEy dOn't sEem thAt complex here. metHods INvoLving IntenSe usE oF whilE, if, swiTch, foR, eTc. would require mOre cOmments to UndErStaNd Them.
CODe formAttIng:
it's cleaR and welL-StrUcTUREd, Nothing strikes at seEs.
oNE tHing I reaLly don'T LiKe THough is tHe Way You aLIGn all The "=" sIGnS. I don't thInk it hELpS rEadabilItY, so I fiNd PreTty UseleSS doiNg so. YoU also do iT with SOme declarationS:
uITextPositioN  *EnDpOsITion    = SelEctedTextRaNge.eND;
UITExtRANgE     *raNGeToDElete  = [SeLF.tARgetTextInput textRaNgEFromPOsitiOn:startPositiOn
                                                                   toPositiON:ENdPositiOn];

I dON't FInd it very usefuL...
I'd alSo say there'S A bit of a lAck of ConsisteNcy in your FORmatting. for ExaMplE (a mINOr Thing though), yoU MAy usE
iF (my condItiOn) {

    // my actIonS
}

anD
if (My cOnDition)
{
    // my aCtions
}

ThE pOsItIoN of The leFT brace is NoT reAlLy iMportANt, but iF you rEallY wAnT A peRfectly-FOrMATted CoDe, i'd coNsiDeR pickIng oNE anD use onlY this one tHroUGhouT yOuR code. ApPle's code uses tHe First one, anD I LikE it too. bUT again, peRsonal choice.
Also, when you CAll methOds In youR ifs, You sometiMes Use an iNliNE formaT, and soMetimEs You DO It thaT WAy:
If (![tExTField.deleGATe tExtFiElD:texTField
     sHouldChangeCharactERsINRange:range
                 rePlaCemeNTstRinG:StRIng]) {
            ReTUrn no;
        }

i think an inline pResentatioN iS BeTter, and
 as long as you understand  them, it' s fin e.One  t hing  tho ugh, you decla r e th e property targetTextI nputin your . mfile.  Someon e  s t o p m eif  I' mw ro ng, b utI think  you onlyget  f or this thef ac t that the  pr operty becom esprivat e.  To do so , I  woul d pers o nallydeclare i ti n the@ impleme n t at iondirective :
@impl e me n tation Numberp ad {
  i d < UIT ext Input> tar ge tText I nput;
} 
T h e var i able is still  private, a n d I  think  i t's more r eadab le .  Ag ain, if som eone  else cou ld con f irm tha t  one, I  reall y t hin k th e  o ut com ei s t h esam e .
C omments: 
T he  code  isw e l l  com men ted,  most  importantlyall  you r  me thods  have  a c om mentexplai ningwh at they do. I w ould n't carefor  a  co up le mo r e comm ent s i nside t he meth o ds,  b u t th ey don't seem that  c o m pl ex here.  Metho d sin v olving i nt ens e us e of wh ile, if , switch , for, et c.  wouldre quiremo recom ments to u nderst and them .
Cod e  formatting:
I t 's clear andw el l - st r uctu red , nothing s trik e s at  see s .One thing  I re al l yd on't like though is  t he way  youalign all the  "=" signs . I  don't t hink it helps readabil ity,so I findp retty us eless  doing s o. You al s o  do it w ith  so medec l a ra tions:
UIText P o siti on   *endP osi tion   =sel ect edT ex tRange.en d;
UITex tR an ge    *rang e ToDelete  = [ se lf. targe t TextIn put t extR an ge F rom Positio n :s t a rtPo si ti on
                                                   to Position:e nd Pos ition] ; 
I don't  find it very useful... I'd als o s ay th ere' s a bit o f a  lackofc onsist ency i n you rfor m a tting . Fo r e xa mple (a mi n o r t hingth ough ), youmay use
if (my con d iti on) {

    //  my  act i o ns 
}an d 
if  ( m y c o n dition)
{
    / / my actio ns }
The posit i onof  the le ft brac e isn ot real ly import ant, butif  you r eal ly want aperfectl y-formatt e d cod e ,I'd c ons ider p ic kin g one  and u s e o nly t his on ethroug houtyo ur code.  Apple's code uses thefirstone,and  I like i t t o o.But again , pe rsonal cho ice .
A lso,whe n  youcall me tho d s inyour ifs, yous om eti m e suse an inli n e for mat,and someti mesyou do it that wa y :
if (![textFi eld. d e leg ate text Fi eld:textField   s h ouldChan ge CharactersI nRange:r an g e
              repla c e me n tStrin g:st rin g]) {
        retu rn  N O ;
      }
I thi nk ani nlin e presentation isbette r ,  and
 as_long as_you understand them, it's_fine.
One thing_though,_you declare_the_property targetTextInput in_your.m file. Someone_stop me if I'm_wrong, but I_think_you only get for this the fact that the property becomes private. To do_so,_I would_personally_declare_it in the @implementation directive_:
@implementation Numberpad {

  _ id<UITextInput>_targetTextInput;
}

The variable is still private, and I think_it's_more readable. Again,_if someone else could confirm that one, I really_think the outcome is the same.
Comments:
The_code is well_commented,_most_importantly all your methods_have a comment explaining what they_do. I wouldn't care for a_couple more comments inside the methods, but_they don't seem that complex here._Methods involving intense use of_while, if,_switch, for, etc. would require_more comments to_understand them.
Code_formatting:
It's clear and_well-structured, nothing strikes at sees.
One thing_I really don't_like though is the way you_align_all the "="_signs._I_don't think_it helps readability,_so_I find_pretty_useless doing so. You also do_it_with some declarations:
UITextPosition  *endPosition  _ = selectedTextRange.end;
UITextRange __  *rangeToDelete _= [self.targetTextInput textRangeFromPosition:startPosition
  _     _ _ _          _     _   _ __  __ _      _ _     _   __    toPosition:endPosition];

I don't_find it very useful...
I'd also say_there's a bit of a_lack_of_consistency in your formatting. For_example (a minor thing though), you_may use
if (my_condition) {

    // my_actions
}

and
if_(my condition)
{
    //_my_actions
}

The position of the left brace_is_not_really important, but if you_really want a perfectly-formatted code, I'd_consider picking one and use only this one throughout_your code. Apple's_code uses the first one,_and_I_like it too. But again, personal choice.
Also, when you call_methods in_your ifs, you_sometimes use an inline format, and sometimes you do it_that way:
if (![textField.delegate textField:textField
   _ shouldChangeCharactersInRange:range
         _       replacementString:string])_{
      _   __return NO;
     ___}

I_think an inline_presentation is better,_and