• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Modify Input in NSTableView
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Modify Input in NSTableView


  • Subject: Re: Modify Input in NSTableView
  • From: "K. Darcy Otto" <email@hidden>
  • Date: Mon, 31 Mar 2008 11:26:56 -0700

On Mar 31, 2008, at 00:29, Quincey Morris wrote:

> On Mar 30, 2008, at 23:08, K. Darcy Otto wrote:
>

>> I'm working on an application in which users enter data into a
>> table, but I need to substitute a greater-than symbol (>) for a
>> right-arrow symbol (→, unicode: 2192) as the user presses they key
>> (or copies the text, or whatever). After looking at the docs and
>> this list, I'm not much closer to determining the best way to do
>> this (or even how to do it). So far, I have been thinking I have
>> to do something with NSWindow and the fieldEditor; perhaps setting
>> the window's field editor to be a particular NSTextView, and
>> implement some method in that text view (insertText:?) to make the
>> substitution. I take it that working with keyDown: would not be
>> the best approach. Would this be on the right track? Any help
>> would be appreciated.


>
> You could try adding a validate<Key> method for the property that
> holds the string value. In that method, take the input string and
> create a new string, replacing whatever characters you need to. Pass
> the new string back in the first parameter, and return YES from the
> method.
>
> If I haven't overlooked something obvious, this would work no matter
> whether the text was typed or pasted into the editing field.
>
> Oh -- make sure you check "Validates immediately" for the table
> column binding in IB, too.


Of course, this is only going to make the replacement happen when the user presses return or tab. To get it to happen as soon as a replaceable character is typed, you'd have to convince the field editor to validate after every keystroke or editing action. So maybe this is not the best way.

This is exactly the problem I'm running into. I can get changes to be made after the user exits the editing field, but I cannot get the changes to be made on-the-fly. After some additional reading, I have tried to solve this problem by implementing the following in the NSWindow delegate (where DeductionTable is my NSTableView subclass, and DeductionTableFieldEditor is my NSTextView subclass):


-(id)windowWillReturnFieldEditor:(NSWindow *)window toObject: (id)anObject
{
if ([anObject isKindOfClass:[DeductionTable class]])
{
return [[DeductionTableFieldEditor alloc] init];
}
return nil;
}


Then, I started playing around with -(BOOL)textView:(NSTextView *)aTextView shouldChangeTextInRange:(NSRange)affectedCharRange replacementString:(NSString *)replacementString and - (BOOL)textShouldBeginEditing:(NSText *)aTextObject; but all I've succeeded in doing is messing up the editing functions that were there previously. Any other suggestions?




_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: Modify Input in NSTableView
      • From: "K. Darcy Otto" <email@hidden>
  • Prev by Date: Re: Threads and Core Data, bindings results in view corruption
  • Next by Date: Re: Network notifications
  • Previous by thread: Re: Modify Input in NSTableView
  • Next by thread: Re: Modify Input in NSTableView
  • Index(es):
    • Date
    • Thread