Retired Document
Important: This document is replaced by File System Programming Guide.
Getting the Current Selection
You can get the currently selected item in the browser of an NSSavePanel
or NSOpenPanel
object by having the delegate of the panel object implement the panelSelectionDidChange:
delegation method. The delegate then can perform some operation based on the user’s selection, such as displaying metadata about a chosen file in an accessory view, as illustrated in Figure 1.
In its implementation of panelSelectionDidChange:
, the delegate sends a message back to the NSOpenPanel
or NSSavePanel
object (sender) to get the current filename. For NSSavePanel
, this message is filename
; for NSOpenPanel
, send filenames
and then get the first item in the array. Listing 1 shows how you might implement the method to display in the information in the accessory view in Figure 1.
Listing 1 Getting the selection in the panel browser
- (void)panelSelectionDidChange:(id)sender { |
NSArray *curFiles = [sender filenames]; |
if ([curFiles count] == 1) { // ignore multiple selections |
NSString *curPath = [curFiles objectAtIndex:0]; |
if (curPath != nil) { |
NSDictionary *fAttrs = [[NSFileManager defaultManager] fileAttributesAtPath:curPath traverseLink:YES]; |
if (fAttrs != nil) { |
[infoFile setStringValue: [curPath lastPathComponent]]; |
[infoMod setStringValue: [[fAttrs objectForKey:NSFileModificationDate] descriptionWithCalendarFormat:@"%a, %b %d, %Y %H:%M:%S" timeZone:nil locale:nil]]; |
[infoOwner setStringValue: [fAttrs objectForKey: NSFileOwnerAccountName]]; |
[infoGroup setStringValue: [fAttrs objectForKey: NSFileGroupOwnerAccountName]]; |
} |
} |
} |
} |
In this code example, the delegate uses the NSFileManager
method fileAttributesAtPath:traverseLink:
to fetch information about the currently selected file. It then sets the string value of various text fields in the accessory view.
Copyright © 2011 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2011-05-25