2009-05-04 33 views
-2

我最近从朋友那里得到了一些代码的例子,但他告诉我需要更改一行以使其适用于我。下面的代码:我应该用什么替换这段代码?

- (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

您的应用程序委托代码似乎根本没有表处理代码。如果你没有编写代码来填充表格,你应该先写,然后担心如何灰色文本。 – 2009-05-04 16:08:36

+0

这是核心数据,我认为它已经做到了。 – Joshua 2009-05-04 18:00:16

回答

1

您需要更改if语句以读取支持模型中给定行的复选框的布尔值。由于您没有包含任何有关您的模型的信息,因此没有人能够为您提供实际使用的代码行。

目前还不清楚,其余的代码将做你想要的;它有条件地改变文本的颜色,而不是行本身。

0

是什么[自我visibilityForFile:]返回?如果它不是BOOL,那么你需要将它改成返回BOOL的东西。你为什么不问问你的朋友你应该改变路线?

+0

我确实问过他,但我没有回复,这很奇怪。想知道你能否帮忙。我会改变它以使它返回一个BOOL? – Joshua 2009-05-04 13:06:36

1

通常,您不想将一个单元的显示基于另一个单元的值。更符合MVC的方法是使复选框控制该行对象的属性(例如,isActive),然后您可以在上面的代码中检查该对象的属性以决定如何绘制文本。只要复选框状态和文本颜色都基于相同的属性,它们就会根据需要进行匹配。

此外,你想要的颜色不是[NSColor lightGrayColor],而是[NSColor disabledControlTextColor]。通常,您只想禁用整个单元格,即[aCell setEnabled:NO],而不是仅仅更改文本颜色,这使其看起来像一个禁用的单元格。

相关问题