Сенсорная панель, как добавить прокручиваемый список кнопок?

Я хотел бы показать прокручиваемый список кнопок на сенсорной панели моего приложения, аналогично тому, как 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

Надеюсь, это кому-нибудь поможет;-)

Другие вопросы по тегам