Я пытаюсь создать NSMatrix
из NSButtonCell
s, где между нулевыми и четырьмя кнопками можно выбрать (переключается). Я пробовал следующий (тестовый) код, но не уверен, как я могу предоставить требуемые функции. Возможно, это невозможно с NSMatrix
, и мне нужно посмотреть на альтернативный элемент управления или создать собственный?NSMatrix с несколькими кнопками переключения?
@interface MatrixView : NSView
{
NSScrollView *_scrollView;
NSMatrix *_matrixView;
}
@end
@implementation MatrixView
- (id)initWithFrame:(NSRect)frameRect
{
NSLog(@"initWithFrame. frameRect=%@", NSStringFromRect(frameRect));
self = [super initWithFrame:frameRect];
if (self != nil)
{
_scrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, frameRect.size.width, frameRect.size.height)];
[_scrollView setBorderType:NSNoBorder];
[_scrollView setHasVerticalScroller:YES];
[_scrollView setHasHorizontalScroller:NO];
[_scrollView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
NSSize contentSize = [_scrollView contentSize];
contentSize.height = 300;
// Make it 3 x however-many-buttons-will-fit-the-height
CGFloat gap = 8.0;
CGFloat width = (contentSize.width/3.0) - (gap * 2.0);
NSUInteger rows = (contentSize.height/(width + gap));
NSLog(@"width=%f, rows=%lu", width, rows);
NSButtonCell *prototype = [[NSButtonCell alloc] init];
[prototype setTitle:@"Hello"];
[prototype setButtonType:NSToggleButton];
[prototype setShowsStateBy:NSChangeGrayCellMask];
_matrixView = [[NSMatrix alloc] initWithFrame:NSMakeRect(0, 0, contentSize.width, contentSize.height)
mode:NSListModeMatrix
prototype:prototype
numberOfRows:rows
numberOfColumns:3];
[_matrixView setCellSize:NSMakeSize(width, width)];
[_matrixView setIntercellSpacing:NSMakeSize(gap, gap)];
[_matrixView setAllowsEmptySelection:YES];
[_matrixView sizeToCells];
[_scrollView setDocumentView:_matrixView];
[self addSubview:_scrollView];
[self setAutoresizesSubviews:YES];
[prototype release];
}
return self;
}
...
Вы, конечно, может иметь матрица с несколькими переключающими кнопками - я сделал один в IB, с NSButtonCells (нажмите на push off type) и матрицу в режиме подсветки. Это показало кнопки, которые остались подсвеченными, пока вы не подтолкнули их снова. Ограничение только до 4, немного сложнее - еще не совсем понял, что один из них еще нет. – rdelmar
@rdelmar Я только что изменил приведенный выше код, чтобы использовать кнопки push-on-push-off и поместить матрицу в режим подсветки, но она не работает по желанию (режим push-on-push-off отменяется по матрице, и ничто не задерживается). Было ли что-то еще, что нужно было установить? – trojanfoe