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

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

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

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

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

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

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

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

В частности:

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

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

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

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

Заранее спасибо.

1 ответ

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

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


Я бы посоветовал вам не создавать окно, вы можете создать NSView с passwordTextField и 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
Другие вопросы по тегам