Многоразовый NSView из .xib

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

Само поле пароля не представляет проблемы. Я подклассифицировал NSSecureTextField, чтобы получить поведение, которое я хочу. Я делаю его связанным, поэтому я могу переключать отображение с другого элемента управления (скажем, флажок).

enter image description hereenter image description here

Теперь я хочу повторно использовать это в нескольких местах в моем приложении. Я могу просто использовать свое настраиваемое защищенное текстовое поле рядом с флажком везде, где мне это нужно. Но я предпочел бы группировать эти фрагменты вместе в компонент многократного использования.

Поэтому я создаю один с помощью построителя интерфейса:

enter image description here

Теперь, как я могу использовать это в разных окнах? Я добавил в свое окно компонент "Пользовательский вид" и задал его соответствующим образом:

enter image description here

Но во время выполнения я просто получаю пустое пространство.

1 - Предположительно, потому что мое представление определено в .xib - мне нужно что-то сделать в коде для загрузки моего экземпляра PasswordView из .xib; но что именно мне нужно делать? У меня проблемы с этим.

В частности:

  • Что такое процесс /API для загрузки экземпляра моего представления из .xib? Я пытаюсь найти документацию по этому вопросу.

  • Как только я загрузил экземпляр моего представления, как вставить его вместо моего "замещающего" пользователя? Предположительно, мне нужен выход на мой пользовательский взгляд, но что тогда? Я просто назначил свой загруженный экземпляр в розетку? Должен ли я добавить его в качестве подсмотра к розетке?

  • Где должна быть эта логика? Внутри init, внутри AwakeFromNib?

2 - Я знаю, что могу использовать NSViewController для своего пользовательского представления (пример) и загружать его таким образом. Но для этого мне действительно нужен контроллер вида? Кажется, мне просто нужно создавать автономные представления и легко создавать их... Но, возможно, это не способ Cocoa? Мне кажется, что должен быть простой способ составления представления из нескольких .xib без необходимости контроллера для каждого подвидного представления (которое может быть просто текстовым полем или кнопкой), но я просто не нахожу его...

Спасибо заранее.

Ответ 1

Если я получаю от вашего вопроса - у вас есть XIB с окном, содержащим парольTextField и checkBox.

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


Я бы предложил вам не создавать окно, вы можете создать NSView с помощью пароляTextField и checkBox.

И во всех окнах нарисовать пустой вид, и вы можете загрузить этот вид xib на него, поэтому один объект может использоваться несколько раз.


ИЗМЕНИТЬ

Вот пример кода, который я использую для загрузки labelView в главном окне.

#import "AppDelegate.h"

@implementation AppDelegate

@synthesize window = _window;
@synthesize myLabelViewController;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{

    myLabelViewController=[[LabelView alloc] initWithNibName:@"LabelView" bundle:nil];
    [_window setContentView:[myLabelViewController view]];

}

@end

LabelView.h

#import <Cocoa/Cocoa.h>

@interface LabelView : NSViewController

@end

LabelView.m

#import "LabelView.h"

@implementation LabelView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
    }

    return self;
}

@end