Re: Modify Input in NSTableView
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