我最近从朋友那里得到了一些代码的例子,但他告诉我需要更改一行以使其适用于我。这是代码:
- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:
(NSTableColumn *)aTableColumn row:(int)rowIndex {
if ([aCell respondsToSelector:@selector(setTextColor:)]) {
if ([self visibilityForFile:[fileList objectAtIndex:rowIndex]] == NO)
[aCell setTextColor:[NSColor lightGrayColor]];
else [aCell setTextColor:[NSColor blackColor]];
}
}
我需要替换这一行:
[self visibilityForFile:[fileList objectAtIndex:rowIndex]] == NO
使用一些不同的代码,我实际上要做的是,因为我有一个表,表中的每一行都有一个复选框,当选中一行中的复选框时,该行的文本颜色将会改变。我认为代码需要检查以查看行中的复选框是否被选中,我只需要代码。
更新
这是应用程序的代表(核心数据)。
头文件(.h):
#import <Cocoa/Cocoa.h>
@interface Spark_AppDelegate : NSObject
{
IBOutlet NSWindow *window;
IBOutlet NSMenu *theMenu;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
NSManagedObjectModel *managedObjectModel;
NSManagedObjectContext *managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;
- (NSManagedObjectModel *)managedObjectModel;
- (NSManagedObjectContext *)managedObjectContext;
- (IBAction)saveAction:sender;
@end
.M文件
/**
Returns the support folder for the application, used to store the Core Data
store file. This code uses a folder named "Spark" for
the content, either in the NSApplicationSupportDirectory location or (if the
former cannot be found), the system's temporary directory.
*/
- (NSString *)applicationSupportFolder {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
return [basePath stringByAppendingPathComponent:@"Spark"];
}
/**
Creates, retains, and returns the managed object model for the application
by merging all of the models found in the application bundle.
*/
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
/**
Returns the persistent store coordinator for the application. This
implementation will create and return a coordinator, having added the
store for the application to it. (The folder for the store is created,
if necessary.)
*/
- (NSPersistentStoreCoordinator *) persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSFileManager *fileManager;
NSString *applicationSupportFolder = nil;
NSURL *url;
NSError *error;
fileManager = [NSFileManager defaultManager];
applicationSupportFolder = [self applicationSupportFolder];
if ( ![fileManager fileExistsAtPath:applicationSupportFolder isDirectory:NULL] ) {
[fileManager createDirectoryAtPath:applicationSupportFolder attributes:nil];
}
url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"Spark.xml"]];
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]){
[[NSApplication sharedApplication] presentError:error];
}
return persistentStoreCoordinator;
}
/**
Returns the managed object context for the application (which is already
bound to the persistent store coordinator for the application.)
*/
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
/**
Returns the NSUndoManager for the application. In this case, the manager
returned is that of the managed object context for the application.
*/
- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window {
return [[self managedObjectContext] undoManager];
}
/**
Performs the save action for the application, which is to send the save:
message to the application's managed object context. Any encountered errors
are presented to the user.
*/
- (IBAction) saveAction:(id)sender {
NSError *error = nil;
if (![[self managedObjectContext] save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
}
/**
Implementation of the applicationShouldTerminate: method, used here to
handle the saving of changes in the application managed object context
before the application terminates.
*/
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
NSError *error;
int reply = NSTerminateNow;
if (managedObjectContext != nil) {
if ([managedObjectContext commitEditing]) {
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
// This error handling simply presents error information in a panel with an
// "Ok" button, which does not include any attempt at error recovery (meaning,
// attempting to fix the error.) As a result, this implementation will
// present the information to the user and then follow up with a panel asking
// if the user wishes to "Quit Anyway", without saving the changes.
// Typically, this process should be altered to include application-specific
// recovery steps.
BOOL errorResult = [[NSApplication sharedApplication] presentError:error];
if (errorResult == YES) {
reply = NSTerminateCancel;
}
else {
int alertReturn = NSRunAlertPanel(nil, @"There Are Un-Saved Changes. Quit anyway?" , @"Quit anyway", @"Cancel", nil);
if (alertReturn == NSAlertAlternateReturn) {
reply = NSTerminateCancel;
}
}
}
}
else {
reply = NSTerminateCancel;
}
}
return reply;
}
/**
Implementation of dealloc, to release the retained variables.
*/
- (void) dealloc {
[managedObjectContext release], managedObjectContext = nil;
[persistentStoreCoordinator release], persistentStoreCoordinator = nil;
[managedObjectModel release], managedObjectModel = nil;
[super dealloc];
}
@end
答案 0 :(得分:1)
您需要更改if语句以读取支持模型中给定行的复选框的布尔值。由于您没有包含有关模型的任何信息,因此没有人能够为您提供实际的代码行。
还不清楚其余的代码是否能满足您的需求;它会有条件地改变文本的颜色,而不是行本身。
答案 1 :(得分:1)
通常,您不希望将一个单元格的显示基于另一个单元格的值。更符合MVC的方法是让复选框控制该行的对象(例如,isActive
)的属性,然后您可以在上面的代码中检查该属性以决定如何绘制文本。只要复选框状态和文本颜色都基于相同的属性,它们就会根据需要匹配。
此外,您想要的颜色不是[NSColor lightGrayColor]
,而是[NSColor disabledControlTextColor]
。通常情况下,您只想禁用整个单元格,即[aCell setEnabled:NO]
,而不是仅仅更改文本颜色,这使其像一个禁用的单元格一样,看起来就像一个。
答案 2 :(得分:0)
[visibility visibilityForFile:]返回什么?如果它不是BOOL,那么您需要将其更改为返回BOOL的内容。你为什么不问你的朋友你应该把这条线换成什么?