У меня возникли проблемы с настройкой пользовательского NSView для пунктов меню NSPopupButton. Вот что у меня есть до сих пор:
@interface ViewController ()
@property (weak) IBOutlet NSPopUpButton *popupButton;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
for(int i = 0; i < 25; i++) {
NSMenuItem *menuItem = [[NSMenuItem alloc ] initWithTitle:[NSString stringWithFormat:@"%d", i] action:@selector(itemClicked:) keyEquivalent:@""];
MenuView *menuView = [[MenuView alloc] initWithFrame:CGRectMake(0, 0, 184, 50)];
menuView.displayText.stringValue = @"This is a test";
[menuItem setView:menuView];
[self.popupButton.menu addItem:menuItem];
}
}
- (void)itemClicked:(id)sender {
}
@end
//Мой пользовательский вид
@implementation MenuView
- (id)initWithFrame:(NSRect)frameRect {
NSString* nibName = NSStringFromClass([self class]);
self = [super initWithFrame:frameRect];
if (self) {
if ([[NSBundle mainBundle] loadNibNamed:nibName
owner:self
topLevelObjects:nil]) {
[self configureView];
}
}
return self;
}
- (void)awakeFromNib {
[super awakeFromNib];
[self configureView];
}
- (void)configureView {
[self setWantsLayer:YES];
self.layer.backgroundColor = [NSColor blueColor].CGColor;
}
@end
//Вот как выглядит мой xib MenuView
И вот проблема:
Кажется, что это должно быть довольно простой задачей, но я не уверен, что происходит с моим представлением и почему моя метка в представлении, кажется, исчезает и не отображает текст для каждого из представлений. Я копался в документации и наткнулся на это для меню NSPopupButton:
// Overrides behavior of NSView. This is the menu for the popup, not a context menu. PopUpButtons do not have context menus.
@property (nullable, strong) NSMenu *menu;
Я не уверен, есть ли что-то, что я делаю неправильно, что вызывает эту проблему, или то, что я пытаюсь сделать в этом контексте, недостижимо вне NSPopupButton NSMenu. Если у кого-то есть опыт в этом и может дать совет, я был бы очень признателен.
initWithFrame
, это не представление из пера. - person Willeke   schedule 15.04.2016