Многоразовый 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