Look into the field editor. You probably need to manipulate the
selection on the field editor, not the NSTextField itself.

Jerry Krinock wrote:

> I'd like to pre-place some text into an NSTextField, and then give it
> focus (make it firstResponder) and immediately allow the user type in
> additional text, concatenating it.
>
> Unfortunately, when I make the field firstResponder, my pre-placed
> text is selected, and when the user starts typing, it gets
> overwritten. Very annoying.
>
> Does anyone know how to deselect text in an NSTextField?
>
> NSTextField has a selectText:(id)sender method but no deselectText:
> method.
>
> I've tried sending -setStringValue:, -makeFirstResponder: and
> -endEditingFor: in various different orders and combinations, but
> nothing works.
>
> Thanks,
>
> Jerry Krinock

You need to get hold of the field editor associated with the text
field in
the awakeFromNib of your controller and configure it. The code could be
something like:
=====
-(void)awakeFromNib
{
[mTextField setSelectable:YES];
[mTextField setDelegate:self];
[mWindow makeFirstResponder:mTextField];

> I'd like to pre-place some text into an NSTextField, and then give it
> focus (make it firstResponder) and immediately allow the user type in
> additional text, concatenating it.
>
> Unfortunately, when I make the field firstResponder, my pre-placed
> text is selected, and when the user starts typing, it gets
> overwritten. Very annoying.
>
> Does anyone know how to deselect text in an NSTextField?
>
> NSTextField has a selectText:(id)sender method but no deselectText:
> method.
>
> I've tried sending -setStringValue:, -makeFirstResponder: and -
> endEditingFor: in various different orders and combinations, but
> nothing works.
>
> Thanks,
>
> Jerry Krinock
>

Thank you, Shripada. I just figured this out after considering John's
reply.

The location member of the range passed to setSelectedRange should be
set to the end of the string, as you have done. At first I set the
range to {0,0}, but that put the insertion point at the ^beginning^ of
the text, which was another ARGHHHH, because there ain't no -
setInsertionPoint in any of the related classes.

Apparently, the insertion point is always set to the ^end^ of the
selectedRange.

>
> On 2007 Dec, 20, at 22:12, Shripada Hebbar wrote:
> >> [mWindow makeFirstResponder:mTextField];
>>
>> //Get hold of the field editor and deselect its text
>> NSText* fieldEditor = [mWindow fieldEditor:YES forObject:mTextField];
>> [fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string]
>> length],0)];
>> [fieldEditor setNeedsDisplay:YES];>
> Thank you, Shripada. I just figured this out after considering John's
> reply.
>
> The location member of the range passed to setSelectedRange should be
> set to the end of the string, as you have done. At first I set the
> range to {0,0}, but that put the insertion point at the ^beginning^ of
> the text, which was another ARGHHHH, because there ain't no
> -setInsertionPoint in any of the related classes.
>
> Apparently, the insertion point is always set to the ^end^ of the
> selectedRange.
>
> All works now. Thanks.

>
> On 2007 Dec, 20, at 22:12, Shripada Hebbar wrote:
> >> [mWindow makeFirstResponder:mTextField];
>>
>> //Get hold of the field editor and deselect its text
>> NSText* fieldEditor = [mWindow fieldEditor:YES forObject:mTextField];
>> [fieldEditor setSelectedRange:NSMakeRange([[fieldEditor string]
>> length],0)];
>> [fieldEditor setNeedsDisplay:YES];>
> Thank you, Shripada. I just figured this out after considering John's
> reply.
>
> The location member of the range passed to setSelectedRange should be
> set to the end of the string, as you have done. At first I set the
> range to {0,0}, but that put the insertion point at the ^beginning^ of
> the text, which was another ARGHHHH, because there ain't no -
> setInsertionPoint in any of the related classes.
>
> Apparently, the insertion point is always set to the ^end^ of the
> selectedRange.

No, the selected range and the insertion point are the same thing. If
it has zero length, it shows up as a blinking vertical line, and if it
doesn't, then it appears as a highlighted range of text.