Расположение листов

Лист не должен быть сварен к его расположению по умолчанию чуть ниже строки заголовка. Можно расположить, где лист кажется присоединенным к окну путем реализации метода делегата window:willPositionSheet:usingRect:, который вызывает объект NSWindow непосредственно перед тем, как он анимирует лист.

Метод действительно больше, чем располагает лист на свое окно. Это может также определить, происходит ли анимация листа из определенного объекта или области окна. С window:willPositionSheet:usingRect: у Вас может, например, быть предупредительный лист, кажется, появляются из текстового поля, связанного с условием, описанным на предупреждении; Вы могли также расположить лист так, чтобы он центрировался только под текстовым полем. Вы могли бы также реализовать этот метод для помещения листа чуть ниже панели инструментов окна, а не ее строки заголовка.

Даже при том, что метод использует структуры NSRect, чтобы указать, что расположение листа — один передало в как расположение по умолчанию и другой новое (возвращенное) расположение — NSRect не определяет прямоугольник, занятый листом. (Все листы имеют стандартный размер в связи со своим окном.) Вместо этого структура NSRect, особенно структура origin элемент (структура NSPoint), укажите, где верхний левый угол листа присоединен к окну (в координатах окна). size.width элемент NSRect указывает ширину начальной анимации (size.height в настоящее время не определено).

Базовое внедрение window:willPositionSheet:usingRect: является прямым. Это передает в структуре NSRect, указывающей расположение по умолчанию листа. Вы возвращаете структуру NSRect, указывающую новое расположение листа и ширину начальной анимации.

Перечисление 1 показывает, как делегат окна мог бы реализовать window:willPositionSheet:usingRect: для имения листа анимируют от текстового поля (fooField) и затем станьте присоединенными к окну прямо ниже текстового поля.

Перечисление 1  , Располагающее лист прямо под текстовым полем

- (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet
        usingRect:(NSRect)rect {
    NSRect fieldRect = [fooField frame];
    fieldRect.size.height = 0;
    return fieldRect;
}

Обратите внимание на то, что, как в примере, рекомендуется установить size.height элемент возвращенного NSRect для обнуления.

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