写在前面:
这段时间基市火热,不少新基民老韭菜都扎进来想趁机赚一笔,正好本作者入基不久,赶上了小撮风口,小赚了一点点,瞬间兴趣迸发,遂寻找市面上,体验较好的桌面端软件,方便自己摸鱼,找来找去,不是太复杂,就是自己想要的点没有,于是这款小软件,他来啦。
先看效果
基本实现的功能:
* 天天基金月收益榜三十全览
* 待考察基金一览
* 已买入基金一览
* 三大指数一览
* 添加自选基金
* 删除自选基金
* 拖拽排序
* 计算上日持仓净值
* 手动/自动刷新
技术概览:
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];
}
}
特别鸣谢:
本项目数据来源天天基金,如有侵权,联系删除。感谢所有热爱开源的小伙伴们!!!