Сделайте разделитель NSSplitView неразборным и не показывайте перетаскивающий курсор - PullRequest
16 голосов
/ 03 ноября 2010

У меня есть NSSplitView ( NO UISplitView (Controller) !! ) с тремя подпредставлениями.Теперь, для последнего делителя (индекс 1), я хочу, чтобы делитель не показывал перетаскивающий курсор (две стрелки, указывающие друг на друга).У меня есть это, чтобы остановить перетаскивание, но курсор все еще показывает:

- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex {
  if (dividerIndex == 1) {
    return [splitView frame].size.width - 161;
  }
}

Обратите внимание, что я хочу только скрыть курсор для разделителя в индекс 1.Может кто-нибудь мне помочь?Благодарю.:)


Нет, я не хочу использовать BWToolkit.

Ответы [ 2 ]

79 голосов
/ 05 марта 2012

Я знаю, что на этот вопрос уже был дан ответ, но предоставленный ответ не отвечал моим потребностям.

Метод делегата splitView:effectiveRect:forDrawnRect:ofDividerAtIndex: позволяет вам установить эффективный прямоугольник для перетаскивания разделителя. Если вы вернете NSZeroRect, курсор перетаскивания не появится, независимо от настроек в splitView:constrainMaxCoordinate:ofSubviewAt: и splitView:constrainMinCoordinate:ofSubviewAt:.

Надеюсь, это поможет кому-то еще, кто приземлится здесь.

0 голосов
/ 04 ноября 2010

Попробуйте использовать splitView:constrainMaxCoordinate:ofSubviewAt: и splitView:constrainMinCoordinate:ofSubviewAt: вместо splitView:constrainSplitPosition:ofSubviewAt:.

Первые два метода вызываются один раз, когда пользователь перетаскивает мышь, и они дают достаточно информации, чтобы NSSplitView знал, как изменить курсор во время перетаскивания.

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

...