NSTextField中的多种颜色

时间:2013-07-31 07:44:51

标签: objective-c macos cocoa

我需要更改NSTextField中每行重复的单词的颜色。 我正在使用字典分隔每一行,字典有和数组将单词分隔为数据,然后我检查单词是否重复,我想改变颜色或突出重复的单词..不知道如何做到这一点。

程序是获取单词频率并显示类型标记,平均频率和重复的单词(文本颜色/突出显示)

任何帮助都会很棒。现在我正在从导入的.txt文件中为文本字段分配文本。得到了重复的单词和一切......只需要显示哪个。

当前代码:

-(NSMutableDictionary*) computeWords:(NSMutableDictionary *)linesDic{
    int count = (int)[linesDic count];
    int numberOfwords = 0;
    int numberOfDiffWords = 0;
    NSMutableDictionary* wordComputation = [[NSMutableDictionary alloc]init];
    NSMutableDictionary* duplicates = [[NSMutableDictionary alloc]init];
    for (int x = 1; x<=count; x++) {
        NSMutableArray* duplicateWords = [[NSMutableArray alloc]init];
        NSMutableArray* counter = [[NSMutableArray alloc]init];
        NSString* key = [NSString stringWithFormat:@"%d", x];
        NSArray* data = [linesDic objectForKey:key];
        numberOfwords = (int)[data count];
        numberOfDiffWords = numberOfwords;
        for (int j = 0; j<numberOfwords; j++) {
            for (int k = j+1; k<numberOfwords; k++) {
                if([[data objectAtIndex:k]isEqualToString:[data objectAtIndex:j]])
                {
                    numberOfDiffWords--;
                    [duplicateWords addObject:[data objectAtIndex:k]];
                    //                    NSLog(@"%@", [data objectAtIndex:k]);
                    //                    NSLog(@"%@", [data objectAtIndex:j]);
                }else{
                    NSString* a = [data objectAtIndex:k];
                    NSString* b = [data objectAtIndex:j];
                    if(a.length<b.length){
                        if((b.length - a.length)<=4){
                            if([[b substringToIndex:a.length]isEqualToString:a])
                            {
                                //                                NSLog(@"KEY: %@ comapare b:%d:%@ and a:%d:%@", key,(int)b.length, b, (int)a.length, a );
                                //                                NSLog(@"Key: %@, %@", key, [b substringFromIndex:(a.length-1)]);
                                if([[b substringFromIndex:(a.length)]isEqualToString:@"s"] || [[b substringFromIndex:(a.length)]isEqualToString:@"es"]){
                                    if (([a isEqualToString:@"a"] && [b isEqualToString:@"as"]))  {
                                        //                                        NSLog(@"break at key: %@, words %@:%@",key, a, b);
                                        break;
                                    }
                                    numberOfDiffWords--;
                                    [duplicateWords addObject:[data objectAtIndex:k]];
                                    [duplicateWords addObject:[data objectAtIndex:j]];
                                    //                                    NSLog(@"%@", [data objectAtIndex:k]);
                                    //                                    NSLog(@"%@", [data objectAtIndex:j]);
                                }
                            }
                        }
                    }else{
                        if((a.length - b.length)<=4){
                            if([[a substringToIndex:b.length]isEqualToString:b])
                            {
                                //                                NSLog(@"KEY: %@ compare a:%d: %@ and b:%d: %@", key,(int)a.length, a, (int)b.length, b );
                                //                                NSLog(@"Key: %@, %@", key, [a substringFromIndex:(b.length-1)]);
                                if([[a substringFromIndex:(b.length)]isEqualToString:@"s"] || [[a substringFromIndex:(b.length)]isEqualToString:@"es"]){
                                    if (([a isEqualToString:@"as"] && [b isEqualToString:@"a"])) {
                                        //                                        NSLog(@"break at key: %@, words %@:%@",key, a, b);
                                        break;
                                    }
                                    numberOfDiffWords--;
                                    [duplicateWords addObject:[data objectAtIndex:k]];
                                    [duplicateWords addObject:[data objectAtIndex:j]];
                                    //                                    NSLog(@"%@", [data objectAtIndex:k]);
                                    //                                    NSLog(@"%@", [data objectAtIndex:j]);
                                }
                            }
                        }
                    }
                }
            }
        }

        NSNumber* nw = [NSNumber numberWithInt:numberOfwords];
        NSNumber* ndw = [NSNumber numberWithInt:numberOfDiffWords];
        [counter addObject:nw];
        [counter addObject:ndw];
        NSLog(@"Key: %@, Data: %@", key, duplicateWords);
        [duplicates setObject:duplicateWords forKey:key];
        [wordComputation setObject:counter forKey:key];
    }
    _duplicates = duplicates;
    NSLog(@"%@", _duplicates);
    _wordComputation = wordComputation;
    return wordComputation;
}

-(void)showTable:(NSMutableDictionary*)wordComputation{
    int count = (int)[wordComputation count];
    int numberOfwords = 0;
    int numberOfDiffWords = 0;
    //    NSLog(@"\t \t Diff Words  Words  Type Token \t Mean");
    for (int x = 1; x<=count; x++) {
        NSString* key = [NSString stringWithFormat:@"%d", x];
        NSArray* data = [wordComputation objectForKey:key];
        numberOfwords = [[data objectAtIndex:0]intValue];
        numberOfDiffWords = [[data objectAtIndex:1]intValue];
        //print log
        //        NSLog(@"Line: %@ \t %@ \t %@ \t %@ \t\t %@", key, numberOfDiffWords<10?[NSString stringWithFormat:@"0%d", numberOfDiffWords]:[NSString stringWithFormat:@"%d", numberOfDiffWords], numberOfwords<10?[NSString stringWithFormat:@"0%d", numberOfwords]:[NSString stringWithFormat:@"%d", numberOfwords],[NSString stringWithFormat:@"%d/%d", numberOfDiffWords, numberOfwords], [NSString stringWithFormat:@"%d/%d", numberOfwords, numberOfDiffWords]);
    }

    [_frequencyTable reloadData];
}

尝试这只是为了首先改变字符串的颜色,然后显示

{
    NSColor = "NSCalibratedRGBColorSpace 1 0 0 1";
} 

在字符串

的第5个位置
- (IBAction)ViewDuplicatesPressed:(id)sender {
    [_duplicatesTextField setHidden:NO];
    NSLog(@"%@", _duplicates);


    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@", [_contentTextField stringValue]] /*attributes:@{NSForegroundColorAttributeName : [NSColor redColor]}*/];


    [attributedString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0,5)];



    [_duplicatesTextField setStringValue:[NSString stringWithFormat:@"%@", attributedString]];
}

还试过

int lineCount = (int)[_linesDic count];
NSString* key;
NSMutableDictionary* dupliDic = [[NSMutableDictionary alloc]init];

for (int i = 0; i<lineCount; i++) {
    NSArray *duplicateWords;
    key = [NSString stringWithFormat:@"%d", i];
    duplicateWords = [_duplicates objectForKey:key];
    NSMutableAttributedString *attributedString;
    NSString* stringForKey = [NSString stringWithFormat:@"%@", [_linesDic objectForKey:key]];
    for (int j =0 ; i < (int)[duplicateWords count]; j++) {
        NSString* word = [duplicateWords objectAtIndex:j];
        NSRange range = [stringForKey rangeOfString:word];
       attributedString = [[NSMutableAttributedString alloc]initWithString:[NSString stringWithFormat:@"%@", [_linesDic objectForKey:key]] /*attributes:@{NSForegroundColorAttributeName : [NSColor redColor]}*/];
        [attributedString addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:range];
    }
    [dupliDic setObject:attributedString forKey:key];
}


[_duplicatesTextField setHidden:NO];
NSLog(@"%@", dupliDic);
[_duplicatesTextField setStringValue:[NSString stringWithFormat:@"%@", dupliDic]];

0 个答案:

没有答案