I'd like to be able to type in text and drag readonly elements (tokens) into
a NSTokenField to create a custumizable string format. Like in Apple iWorks
Numers' customize cell format. The user can drag readonly NSTokenCells into
a NSTokenTextField (remaining NSRoundedTokenStyle) and type in plain text
(remaining NSPlainTextTokenStyle). I Subclassed NSTokenFieldCell to a claas
FormatToken so that I can filter out plain text tokens and my FormatToken by
using isKindOfClass: [FormatToken class] (see code below). I'm able to add
my predefined token showing up as a RoundedTokens and add plan text showing
up as PlainTextTokens. The problem is that when I double click the
FormatToken token, NSTokenField jumps to the editing mode and makes it a
normal plain text string. My FormatToken is being replaced by a
NSTokenFieldCell and remains displayed as NSPlainTextTokenStyle. I did set
the setEditable:NO for my FormatToken but it seems when the NSTokenField is
editable, all the Cell are forced editable. Does anyone know how to fix this
problem?


AppDelegate.m

- (void)applicationDidFinishLaunching: (NSNotification *)notification

{

[tokens setTokenStyle: NSPlainTextTokenStyle];

}

- (NSString *)tokenField:(NSTokenField *)tokenField
editingStringForRepresentedObject:(id)representedObject{

NSString* string;

if ([representedObject isKindOfClass: [FormatToken class]]) {

FormatToken* token = representedObject;

string = [token text];

}

else

string = representedObject;

return string;

}



- (NSArray *)tokenField:(NSTokenField *)tokenField
shouldAddObjects:(NSArray*)_tokens atIndex:(
unsigned)index

{

NSEnumerator* enumerator = [_tokens objectEnumerator];

id anObject;

while (anObject = [enumerator nextObject]) {

NSLog (@"%@", [anObject description]);

}

return _tokens;

}



- (NSString *)tokenField:(NSTokenField *)tokenField
displayStringForRepresentedObject:(id)representedObject

{

NSString* string;

if ([representedObject isKindOfClass: [FormatToken class]]) {

FormatToken* token = representedObject;

string = [token text];

}

else

string = representedObject;

return string;

}

- (NSTokenStyle)tokenField:(NSTokenField *)tokenField
styleForRepresentedObject:(id)representedObject

{

if ([representedObject isKindOfClass: [FormatToken class]])

return NSRoundedTokenStyle;

else

return NSPlainTextTokenStyle;

}

- (IBAction)addReadOnlyFromatToken: (id)sender;

{

NSMutableArray* array = [NSMutableArray arrayWithArray:[tokens objectValue
]];

FormatToken* token = [[FormatToken alloc] init];

[token setText: @"Readonly Token"];

[token setEditable: NO]

[array addObject:token];

[tokens setObjectValue: array];

}



FormatToken.m

@implementation FormatToken

- (void)encodeWithCoder:(NSCoder *)encoder

{

[encoder encodeObject:name];

}

- (id)initWithCoder:(NSCoder *)decoder

{

name = [[decoder decodeObject] retain];

return self;

}

- (void)setText:(NSString *)text

{

name = [[NSString alloc] initWithString: text];

}

- (NSString *)text

{

return name;

}
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to