Сделайте разделитель NSSplitView unraggable и не покажите курсор перетаскивания
У меня есть 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.
Ответы
Ответ 1
Попробуйте использовать splitView:constrainMaxCoordinate:ofSubviewAt:
и splitView:constrainMinCoordinate:ofSubviewAt:
вместо splitView:constrainSplitPosition:ofSubviewAt:
.
Первые два метода вызывается один раз, когда пользователь перетаскивает мышь, и они дают достаточно информации для NSSplitView, чтобы знать, как изменить курсор во время перетаскивания.
Последний вызывается повторно, когда пользователь перетаскивает разделитель, поэтому NSSplitView не имеет достаточной информации, чтобы знать, что вы возвращаете постоянное значение каждый раз и, следовательно, не можете изменить курсор.
Ответ 2
Я знаю, что на это некоторое время ответили, но предоставленный ответ не соответствовал моим потребностям.
Метод делегата splitView:effectiveRect:forDrawnRect:ofDividerAtIndex:
позволяет вам установить эффективный прямоугольник для перетаскивания разделителя. Если вы вернетесь NSZeroRect
, курсор перетаскивания никогда не появится, независимо от вашей настройки в splitView:constrainMaxCoordinate:ofSubviewAt:
и splitView:constrainMinCoordinate:ofSubviewAt:
.
Надеюсь, что это поможет кому-то другому, кто приземляется здесь.