2017-02-08 14 views
0

Я бы хотел показать прокручиваемый список кнопок в сенсорной панели приложения, аналогично тому, как Safari показывает избранные при вводе адреса.Touch Bar, как добавить прокручиваемый список кнопок?

Вид прокрутки не является одним из стандартных элементов управления TouchBar. Какие элементы управления вы используете для этого?

ответ

0

Как вы, вероятно, знаете, вы добавили NSTouchBarItem s к экземпляру TouchBar, чтобы добавить элементы в сенсорную панель.

Чтобы добавить прокручиваемый список, создайте экземпляр NSScrubber. После того, как это настроено, вам нужно будет добавить это NSScrubber к пользовательскому экземпляру NSCustomTouchBarItem, скорее всего к view. Затем вы можете добавить этот элемент в сенсорную панель. Обязательно прочитайте связанную документацию.

5

NSScrollView фактически поддерживается на TouchBar (https://developer.apple.com/reference/appkit/nstouchbar#2587738).

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; 
0

Я просто перевел код из Сантьяго Gil Свифта 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 

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

Смежные вопросы