Как развернуть и свернуть части NSSplitView программно?

Мне нравятся ответы, которые предлагают вызвать исключение, но это подразумевает, что вы разработали обработку исключений в архитектуре вашего программного обеспечения.

Обработка ошибок обычно состоит из 3 частей: обнаружение, создание отчетов и восстановление. По моему опыту, ошибки подразделяются на классы серьезности (ниже приведен сокращенный список):

  • Журнал только для отладки
  • Приостановить все, что происходит, и сообщить пользователю, ожидая ответ продолжить.
  • Откажитесь и завершите программу с помощью извиняющегося диалогового окна.

Ваши ошибки должны быть классифицированы, и обработка должна быть максимально обобщенной и последовательной. Если вам нужно учитывать, как обрабатывать каждую ошибку каждый раз, когда вы пишете новый код, у вас нет эффективной стратегии обработки ошибок для вашего программного обеспечения. Мне нравится иметь функцию отчетности, которая инициирует взаимодействие с пользователем, если продолжение зависит от выбора пользователя.

Ответ на вопрос, следует ли возвращать нуль (устаревший шаблон, если я его когда-либо видел), зависит от того, какая функция регистрирует ошибку, что может / должен делать вызывающая сторона, если функция завершается с ошибкой и возвращает ноль, и определяет ли серьезность ошибки дополнительную обработку.

17
задан Cœur 15 April 2017 в 19:11
поделиться

3 ответа

Я только что получил программное развертывание и сворачивание NSSplitView для работы. Я также настроил свой NSSplitView так, чтобы он разворачивал / сворачивал подвид при двойном щелчке по разделителю, поэтому я хотел, чтобы это хорошо сочеталось с этой функцией (и, похоже, так). Вот что я сделал:

(в этом примере splitView - это сам NSSplitView , splitViewSubViewLeft - это подпредставление, которое я хочу развернуть / свернуть, а lastSplitViewSubViewLeftWidth - это переменная экземпляра типа CGFloat .)

// subscribe to splitView's notification of subviews resizing
// (I do this in -(void)awakeFromNib)
[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(mainSplitViewWillResizeSubviewsHandler:)
 name:NSSplitViewWillResizeSubviewsNotification
 object:splitView
 ];

// this is the handler the above snippet refers to
- (void) mainSplitViewWillResizeSubviewsHandler:(id)object
{
    lastSplitViewSubViewLeftWidth = [splitViewSubViewLeft frame].size.width;
}

// wire this to the UI control you wish to use to toggle the
// expanded/collapsed state of splitViewSubViewLeft
- (IBAction) toggleLeftSubView:(id)sender
{
    [splitView adjustSubviews];
    if ([splitView isSubviewCollapsed:splitViewSubViewLeft])
        [splitView
         setPosition:lastSplitViewSubViewLeftWidth
         ofDividerAtIndex:0
         ];
    else
        [splitView
         setPosition:[splitView minPossiblePositionOfDividerAtIndex:0]
         ofDividerAtIndex:0
         ];
}
9
ответ дан 30 November 2019 в 10:29
поделиться

Вы можете попробовать BWToolKit Брэндона Уокина.

Класс BWSplitView имеет метод

- (IBAction)toggleCollapse:(id)sender;
0
ответ дан 30 November 2019 в 10:29
поделиться

Просто скройте подвид, который вы хотите свернуть, например

[aSubViewToCollapse setHidden:YES];

Вы также можете реализовать метод делегата - (BOOL) splitView: shouldHideDividerAtIndex: чтобы вернуть YES, чтобы скрыть разделитель при свертывании.

29
ответ дан 30 November 2019 в 10:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: