Сенсорная панель, как добавить прокручиваемый список кнопок?
Я хотел бы показать прокручиваемый список кнопок на сенсорной панели моего приложения, аналогично тому, как Safari показывает избранное при вводе адреса.
Представление прокрутки, кажется, не является одним из стандартных элементов управления Touch Bar. Какие элементы управления вы используете для этого?
3 ответа
Как вы, наверное, знаете, вы добавляете NSTouchBarItem
с TouchBar
экземпляр для добавления элементов на сенсорную панель.
Чтобы добавить прокручиваемый список, создайте экземпляр NSScrubber
, Как только это настроено, вам нужно добавить, что NSScrubber
на заказной экземпляр NSCustomTouchBarItem
, скорее всего, view
имущество. Затем вы можете добавить этот элемент на сенсорную панель. Обязательно прочитайте связанную документацию.
NSScrollView фактически поддерживается на сенсорной панели ( https://developer.apple.com/reference/appkit/nstouchbar).
NSScrubber предназначен для выбора элементов, похожих на сегментированный элемент управления, но с дополнительным преимуществом прокручиваемого списка. NSScrubber также управляет собственным выделенным состоянием и будет использовать события касания. Вы можете получить горизонтальный прокручиваемый список NSButtons, вставив их в представление прокрутки. Вот быстрый пример использования ограничений для создания NSCustomTouchBarItem:
NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:CGRectMake(0, 0, 400, 30)];
NSMutableDictionary *constraintViews = [NSMutableDictionary dictionary];
NSView *documentView = [[NSView alloc] initWithFrame:NSZeroRect];
NSString *layoutFormat = @"H:|-8-";
NSSize size = NSMakeSize(8, 30);
for (int i = 0; i <= 8; i++) {
NSString *objectName = [NSString stringWithFormat:@"button%@",@(i)];
NSButton *button = [NSButton buttonWithTitle:objectName
target:nil
action:nil];
button.translatesAutoresizingMaskIntoConstraints = NO;
[documentView addSubview:button];
// Constraint information
layoutFormat = [layoutFormat stringByAppendingString:[NSString stringWithFormat:@"[%@]-8-", objectName]];
[constraintViews setObject:button forKey:objectName];
size.width += 8 + button.intrinsicContentSize.width;
}
layoutFormat = [layoutFormat stringByAppendingString:[NSString stringWithFormat:@"|"]];
NSArray *hConstraints = [NSLayoutConstraint constraintsWithVisualFormat:layoutFormat
options:NSLayoutFormatAlignAllCenterY
metrics:nil
views:constraintViews];
[documentView setFrame:NSMakeRect(0, 0, size.width, size.height)];
[NSLayoutConstraint activateConstraints:hConstraints];
scrollView.documentView = documentView;
NSCustomTouchBarItem *item = [[NSCustomTouchBarItem alloc] initWithIdentifier:@"com.TouchBar.scrollButtons"];
item.view = scrollView;
Я только что перевел код из Сантьяго Хиль в Swift 4.
let scrollView = NSScrollView(frame: CGRect(x: 0, y: 0, width: 400, height: 30))
var constraintViews: Dictionary<String, Any> = [:]
let documentView = NSView(frame: NSZeroRect)
var layoutFormat: String = "H:|-8-"
var size = NSSize(width: 8, height: 30)
for i in 0...8 {
let objectName: String = "button\(i)"
let button: NSButton = NSButton(title: objectName, target: nil, action: nil)
button.translatesAutoresizingMaskIntoConstraints = false
documentView.addSubview(button)
// Constraint Information
layoutFormat += "[\(objectName)]-8-"
constraintViews[objectName] = button
size.width += 8 + button.intrinsicContentSize.width
}
layoutFormat += "|"
let hConstraints: Array<NSLayoutConstraint> = NSLayoutConstraint.constraints(withVisualFormat: layoutFormat, options: .alignAllCenterY, metrics: nil, views: constraintViews)
documentView.frame = NSRect(x: 0, y: 0, width: size.width, height: size.height)
NSLayoutConstraint.activate(hConstraints)
scrollView.documentView = documentView
let item = NSCustomTouchBarItem(identifier: .controlScrubber)
item.view = scrollView
Надеюсь, это кому-нибудь поможет;-)