i want trigger keydown event every key action. therefore have created subclass of nsview.
@interface codrtextview : nsview { nstextfield *linenumberspace; nstextview *maintextview; } - (id) initwithtextview:(nstextview *)textview linenumberspace:(nstextfield *)textfield;
i have method's:
- (id) initwithtextview:(nstextview *)textview linenumberspace:(nstextfield *)textfield { self = [self init]; if (self){ maintextview = textview; linenumberspace = textfield; } return self; } - (bool) acceptsfirstresponder { return yes; } - (bool)canbecomekeyview { return yes; }
my plan count lines in textview , write numbers in linenumberspace. know methods work, because have test ibaction on button. method:
- (long) getlinecount{ nsstring *content = [maintextview string]; nsuinteger numberoflines, index, contentlength = [content length]; (index = 0, numberoflines = 0; index < contentlength; numberoflines++){ index = nsmaxrange([content linerangeforrange:nsmakerange(index, 0)]); } nslayoutmanager *layoutmanager = [maintextview layoutmanager]; nsuinteger numberofglyphs =[layoutmanager numberofglyphs]; nsrange linerange; (numberoflines = 0, index = 0; index < numberofglyphs; numberoflines++){ (void) [layoutmanager linefragmentrectforglyphatindex:index effectiverange:&linerange]; index = nsmaxrange(linerange); } numberoflines++; return numberoflines; } - (void)keydown:(nsevent *)event { nsmutablestring *linenumberstring = [nsmutablestring string]; long numberoflines = [self getlinecount]; (int = 1; <= numberoflines; i++){ [linenumberstring appendstring:([nsstring stringwithformat:@"%d \n", i])]; } [linenumberspace setstringvalue:linenumberstring]; }
this method works surely. problem is, button number in linenumberspace changing correctly keydown event don't work. mistake here?
ahhh, looking @ code realize problem is.
your "codrtextview
" object not subclassed "nstextview
" (and also, when instantiate object programatically or via xib or storyboard, make sure text view object custom class of "codrtextview
" , not "nstextview
"), it's not getting "acceptsfirstresponder
" or "canbecomekeyview
" method calls either.
you need descend "codrtextview
" "nstextview
" instead of "nsview
", or need create subclassed "nstextview
" object will receive "keydown:
" event , it'll call code calculates string goes "linenumberspace
" of main view.
does make sense now?
Comments
Post a Comment