MacOS基金管理软件

写在前面:

这段时间基市火热,不少新基民老韭菜都扎进来想趁机赚一笔,正好本作者入基不久,赶上了小撮风口,小赚了一点点,瞬间兴趣迸发,遂寻找市面上,体验较好的桌面端软件,方便自己摸鱼,找来找去,不是太复杂,就是自己想要的点没有,于是这款小软件,他来啦。

先看效果

基本实现的功能:

* 天天基金月收益榜三十全览
* 待考察基金一览
* 已买入基金一览
* 三大指数一览
* 添加自选基金
* 删除自选基金
* 拖拽排序
* 计算上日持仓净值
* 手动/自动刷新

技术概览:

1.NSTableView的基本使用

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {

    FundModel *model = self.modelsAry[row];

    if (model.zoneType == 2) {
        if (tableColumn == tableView.tableColumns[0]) {
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell1" owner:nil];
            cell.textField.stringValue = [NSString stringWithFormat:@"%@(%@)",model.name,model.fundcode];
            return cell;
        }else if (tableColumn == tableView.tableColumns[1]) {
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell1" owner:nil];
            tableColumn.title = @"基月";
            cell.textField.stringValue = [model.SYL_Y isEqualToString:@"--"] ? @"--" : [model.SYL_Y stringByAppendingString:@"%"];
            cell.textField.textColor = LIGHTREDCOLOR;
            return cell;
        }else if (tableColumn == tableView.tableColumns[2]) {
            tableColumn.title = @"基年";
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell2" owner:nil];
            cell.textField.stringValue = [model.SYL_1N isEqualToString:@"--"] ? @"--" : [model.SYL_1N stringByAppendingString:@"%"];
            return cell;
        }else if (tableColumn == tableView.tableColumns[3]) {
            tableColumn.title = @"基昨";
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell3" owner:nil];
            cell.textField.stringValue = [model.RZDF isEqualToString:@"--"] ? @"--" : [model.RZDF stringByAppendingString:@"%"];
            if ([model.RZDF containsString:@"-"]) {
                cell.textField.textColor = GREENCOLOR;
            }else {
                cell.textField.textColor = [NSColor redColor];
            }
            return cell;
        }else if (tableColumn == tableView.tableColumns[5]) {
            tableColumn.title = @"基规";
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell3" owner:nil];
            cell.textField.stringValue = [NSString stringWithFormat:@"%@元",model.ENDNAV];
            return cell;
        }else{
            NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell3" owner:nil];
            cell.textField.stringValue = model.FSRQ;
            return cell;
        }
    }else {

    if (tableColumn == tableView.tableColumns[0]) {
        NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell1" owner:nil];
        cell.textField.stringValue = [NSString stringWithFormat:@"%@(%@)",model.name,model.fundcode];
        return cell;
    }else if (tableColumn == tableView.tableColumns[1]) {
        tableColumn.title = @"基净";
        NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell1" owner:nil];
        cell.textField.stringValue = model.dwjz;
        cell.textField.textColor = [NSColor blackColor];
        return cell;
    }else if (tableColumn == tableView.tableColumns[2]) {
        tableColumn.title = @"基估";
        NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell2" owner:nil];
        cell.textField.stringValue = model.gsz;
        return cell;
    }else if (tableColumn == tableView.tableColumns[3]) {
        tableColumn.title = @"基幅";
        NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell3" owner:nil];
        cell.textField.stringValue = model.gszzl;
        if ([model.gszzl containsString:@"-"]) {
            cell.textField.textColor = GREENCOLOR;
        }else {
            cell.textField.textColor = [NSColor redColor];
        }
        return cell;
    }else if (tableColumn == tableView.tableColumns[5]) {
        tableColumn.title = @"基持";
        NSView * view = [tableView makeViewWithIdentifier:@"cellId" owner:self];
        if (view==nil) {
            view = [[NSView alloc]initWithFrame:CGRectZero];
            NSTextField *jct = [[NSTextField alloc]initWithFrame:CGRectMake(10, 10, 100, 20)];
            jct.alignment = NSTextAlignmentCenter;
            if (_st == ObType) {
                jct.editable = NO;
                jct.placeholderString = @"\\";
            }else if(_st == OwnType) {
                jct.editable = YES;
                jct.delegate = self;
                jct.tag = row;
                NSString *jcStr =  [self.ccDic objectForKey:model.fundcode];

                if (jcStr.length > 0) {
                    BOOL eyeOn = [[[NSUserDefaults standardUserDefaults]objectForKey:EYEON]boolValue];
                    if (eyeOn) {
                        jct.stringValue = jcStr;
                    }else {
                        jct.stringValue = @"******";
                    }
                }else {
                        jct.placeholderString = @"基金持有金额";
                }
            }
            [view addSubview:jct];
        }
        return view;
    }else{
        NSTableCellView *cell = [tableView makeViewWithIdentifier:@"cell3" owner:nil];
        cell.textField.stringValue = model.gztime;
        return cell;
    }
    }
  
}

2.拖拽排序

- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
    NSData *indexSetData = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes requiringSecureCoding:YES error:nil];
    [pboard declareTypes:@[NSPasteboardTypeString] owner:self];
    [pboard setData:indexSetData forType:NSPasteboardTypeString];
    return YES;
}

- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation
{
    if (dropOperation == NSTableViewDropAbove) {
        return NSDragOperationMove;
    }
    return NSDragOperationNone;
}
- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation
{
    NSPasteboard *pboard = [info draggingPasteboard];
    NSData* rowData = [pboard dataForType:NSPasteboardTypeString];
    NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSIndexSet class] fromData:rowData error:nil];
    NSInteger sourceRow = rowIndexes.firstIndex;
    
    if (sourceRow < row) {
        // 从上往下移
          [self.modelsAry insertObject:[self.modelsAry objectAtIndex:sourceRow] atIndex:row];
          [self.modelsAry removeObjectAtIndex:sourceRow];
          [self.codeTableV reloadData];
          [[DataManager manger]dragReset:_st modelsAry:self.modelsAry];
           return YES;
    }else {
          FundModel *smodel = [self.modelsAry objectAtIndex:sourceRow];
          [self.modelsAry removeObjectAtIndex:sourceRow];
          [self.modelsAry insertObject:smodel atIndex:row];
          [self.codeTableV reloadData];
          [[DataManager manger]dragReset:_st modelsAry:self.modelsAry];
          return YES;
    }
}

3.操作设置

- (NSMenu *)menuForEvent:(NSEvent *)event{
    
    if (event.type == NSEventTypeRightMouseDown) {
        NSPoint menuPoint = [self convertPoint:[event locationInWindow] fromView:nil];
        NSInteger row = [self rowAtPoint:menuPoint];
         if (row >= 0) {
           NSMenu * menu = [[NSMenu alloc]initWithTitle:@"Menu"];
           NSMenuItem * item1 = [[NSMenuItem alloc]initWithTitle:@"删除" action:@selector(menuDelete:) keyEquivalent:@""];
           NSMenuItem * item2 = [[NSMenuItem alloc]initWithTitle:@"查看详情>" action:@selector(menuDetail:) keyEquivalent:@""];
           item1.tag = row;
           item2.tag = row;
           item1.target = self;
           item2.target = self;
           [menu addItem:item1];
           [menu addItem:item2];

           return menu;
        }

    }
    
    return nil;
    
}
- (void)menuDelete:(NSMenuItem *)item {
    
    if ([self.mhdelegate respondsToSelector:@selector(tableView:didClickMenuDelete:)]) {
        [self.mhdelegate tableView:self didClickMenuDelete:item.tag];
    }
    
}
- (void)menuDetail:(NSMenuItem *)item {
    
    if ([self.mhdelegate respondsToSelector:@selector(tableView:didClickMenuDetail:)]) {
        [self.mhdelegate tableView:self didClickMenuDetail:item.tag];
    }
    
}

基发财传送门

特别鸣谢:

本项目数据来源天天基金,如有侵权,联系删除。感谢所有热爱开源的小伙伴们!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值