Re: Another NSOutlineView question
Re: Another NSOutlineView question
- Subject: Re: Another NSOutlineView question
- From: Corbin Dunn <email@hidden>
- Date: Tue, 09 Dec 2008 16:02:45 -0800
Le Dec 9, 2008 à 3:36 PM, Graham Cox a écrit :
On 10 Dec 2008, at 3:34 am, Corbin Dunn wrote:
Le Dec 9, 2008 à 12:40 AM, Volker in Lists a écrit :
Hi,
you should be able to detect a double click and call a method then
that either temporarily allows the selection or directly starts
the edit mode. I do have a similar setup - don't do editing, but I
use the double click action via bindings to attach notes to such
an unselectable item.
This approach may work, but it will give some undesired UI; this
app would the only be editable on double clicking, while other apps
edit on single-click (ala Leopard NSTableView and Finder).
You want to use this delegate method:
/* Optional - Custom tracking support
It is possible to control the ability to track a cell or not.
Normally, only selectable or selected cells can be tracked. If you
implement this method, cells which are not selectable or selected
can be tracked, and vice-versa. For instance, this allows you to
have an NSButtonCell in a table which does not change the
selection, but can still be clicked on and tracked.
*/
- (BOOL)tableView:(NSTableView *)tableView shouldTrackCell:(NSCell
*)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)
row AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;
Return YES for your cell, and it should be trackable, and hence
editable...
corbin
Hth,
volker
Am 09.12.2008 um 06:55 schrieb Graham Cox:
In my NSOutlineView, I disallow selection of group items by
implementing the delegate method -outlineView:shouldSelectItem:,
which works fine, but I still want to be able to edit the titles
of group items. The above method prevents this also.
How can I prevent selection of the the item but still allow
editing of its title string?
tia,
OK, I added that method (in its outlineView version) to my delegate
and I'm simply returning YES always. I have verified that the method
is being called when I click on the view.
Unfortunately, it's not doing anything useful for me - it always
changes the selection to the row I click before flipping checkbox
states for example, and I am still unable to edit the name of a
group item (which is being prevented from being selected as desired
by the -outlineView:shouldSelectItem: delegate method).
Any idea why this wouldn't work as advertised? These are the only
two delegate methods I'm implementing other than watching for
selection changes and item expansion notifications.
Actually, I think the row does have to be selected to allow it to be
edited. Is there a reason you can't let it be selected at this point?
In other words, what are you trying to do? I may be able to offer
another solution.
Code:
- (BOOL) outlineView:(NSOutlineView*) outlineView
shouldSelectItem:(id) item
{
#pragma unused(outlineView)
return [item layerMayBecomeActive];
}
- (BOOL) outlineView:(NSOutlineView*) oView shouldTrackCell:
(NSCell*) cell forTableColumn:(NSTableColumn*) tableColumn item:(id)
item
{
#pragma unused(oView,cell,tableColumn,item)
NSLog(@"will track cell: %@", cell ); // this does log on each click
return YES;
}
Another question - is there a way to prevent the outline view from
making itself first responder when clicked unless absolutely
necessary, but without subclassing to override -acceptsFirstResponder?
No; feel free to log a bug request asking for API to easily do this.
You want it to become first responder only in certain situations, like
editing? Something sort of like Mail's sidebar source list? Or do you
have something else in mind?
corbin
_______________________________________________
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