2016-11-09 1 views

Antwort

2

enter image description here

Die Scrolling Monaten könnte ein einzelner NSScrubber sein.

Es gibt einige textbasierte und bildbasierte Beispiele in Apples NSTouchBar-Katalog source. Sehen Sie sich die ScrubberViewController.m-Datei in diesem Projekt an.

Nachfolgend finden Sie einen vereinfachten Code zum Einrichten eines einzelnen NSScrubber zum Anzeigen der Monate. Wahrscheinlich möchten Sie Monatsnamen richtig lokalisieren und Code hinzufügen, um die aktuelle Auswahl hervorzuheben.

static NSString  *kMyScrubberID = @"com.mycompany.myapp.month.scrubber"; 

self.myTitlesArray     = [NSArray arrayWithObjects: 
             @"Jan", 
             @"Feb", 
             @"Mar", 
             @"Apr", 
             @"May", 
             @"Jun", 
             @"Jul", 
             @"Aug", 
             @"Sep", 
             @"Oct", 
             @"Nov", 
             @"Dec", 
             nil]; 

// NSTouchBarDelegate 
- (nullable NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)anIDstr { 
    if ([anIDstr isEqualToString:kMyScrubberID]) { 
     NSCustomTouchBarItem *theScrubberItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:anIDstr]; 
     NSScrubber    *theScrubber  = [[NSScrubber alloc] initWithFrame:NSMakeRect(0, 0, 300, 30)]; 
     theScrubber.scrubberLayout     = [[NSScrubberFlowLayout alloc] init]; 
     [theScrubber registerClass:[NSScrubberTextItemView class] forItemIdentifier:anIDstr]; 
     theScrubber.delegate      = (id<NSScrubberDelegate>)self; 
     theScrubber.dataSource      = (id<NSScrubberDataSource>)self; 
     theScrubber.mode       = NSScrubberModeFree; 
     theScrubber.showsArrowButtons    = NO; 
     theScrubber.selectionOverlayStyle   = nil; 
     theScrubber.selectionBackgroundStyle  = [NSScrubberSelectionStyle roundedBackgroundStyle]; 
     theScrubber.backgroundColor     = [NSColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0]; 
     theScrubberItem.view      = theScrubber; 
     return theScrubberItem; 
    } else { 
     return nil; 
    } 
} 

// NSScrubberDelegate 
- (void)scrubber:(NSScrubber *)scrubber didSelectItemAtIndex:(NSInteger)selectedIndex { 
     NSLog(@"selected month = '%@'", [self.myTitlesArray objectAtIndex[selectedIndex]); 

} 

// NSScrubberDataSource 
- (NSInteger)numberOfItemsForScrubber:(NSScrubber *)scrubber { 
    return [self.myTitlesArray count]; 
} 

- (NSScrubberItemView *)scrubber:(NSScrubber *)scrubber viewForItemAtIndex:(NSInteger)index { 
    NSScrubberTextItemView *theItemView = [scrubber makeItemWithIdentifier:kMyScrubberID owner:nil]; 
    if (index < [self.myTitlesArray count]) { 
     theItemView.textField.stringValue = [self.myTitlesArray objectAtIndex:index]; 
    } 
    return theItemView; 
} 

// NSScrubberFlowLayoutDelegate 
- (NSSize)scrubber:(NSScrubber *)scrubber layout:(NSScrubberFlowLayout *)layout sizeForItemAtIndex:(NSInteger)itemIndex { 
    return NSMakeSize(60, 30); 
}