Показаны сообщения с ярлыком NSPopUpButton. Показать все сообщения
Показаны сообщения с ярлыком NSPopUpButton. Показать все сообщения

31 мар. 2014 г.

Компонент интерфейса в заголовке окна

В обычной программе за отрисовку окна отвечает недокументированный класс NSThemeFrame.
Создаем окно с оутлетом window на это окно. Добавляем NSView и тоже создаем на него привязку оутлет:
Добавляем на вьюху компонент NSPopupButton, убираем флажок Bordered в Инспекторе Атрибутов. В AppDelegate.h должен быть такой код:

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    
    IBOutlet NSWindow *window;
    IBOutlet NSView *itemView;
}

- (void)composeInterface;

@end


AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate

- (void)awakeFromNib
{
[self composeInterface];
}

- (void)composeInterface
{
// Получаем указатель на фрейм окна
NSView *themeFrame = [[window contentView] superview];
NSRect contentWindowFrame = [themeFrame frame]; // размер фрейма окна
NSRect itemViewFrame = [itemView frame]; // размер фрейма вьюхи
NSRect newFrame = NSMakeRect(
                                 contentWindowFrame.size.width - itemViewFrame.size.width, // x позиция
                                 contentWindowFrame.size.height - itemViewFrame.size.height, // y позиция
                                 itemViewFrame.size.width, // ширинв
                                 itemViewFrame.size.height); // высота
    
[itemView setFrame:newFrame];
[themeFrame addSubview:itemView];
}

@end


Вместо NSPopupButton можна добавить любой элемент на вьюху. Главное чтобы высота компонента не была больше чем сам Title Bar.
Дальше все просто. Делаем оутлет на PopupButton, и делаем с ним все что душе угодно.

10 мар. 2014 г.

NSPopupButton выпадающий список

Класс NSPopUpButton определяет объекты, которые реализуют всплывающее окно и ниспадающие меню, в графическом интерфейсе пользователя.

Создадим форму, на которой расположим наши контролы интерфейса:

- PopUpButton;
- TextField;
- Button;
- Label.

Сделаем связи наших контролов с нашими аутлетами и экшенами:

IBOutlet NSTextField *textLabel; // к Label
IBOutlet NSTextField *textField; // к TextField
IBOutlet NSPopUpButton *popUpButton; // к popUpButton


- (IBAction)addItemToPopUpButton:(id)sender; // к кнопке "Добавить"
- (IBAction)itemPopUpButtonDidSelected:(id)sender; // к popUpButton

Теперь напишем код для наших экшенов (думаю объяснять каждую строчку кода не целесообразно, смысл английских слов говорит сам за себя).


- (IBAction)addItemToPopUpButton:(id)sender {
    
    if (![[textField stringValueisEqual: @""]) {
        [popUpButton addItemWithTitle: [textField stringValue]];
    }
}

- (IBAction)itemPopUpButtonDidSelected:(id)sender {
    
    [textLabel setStringValue:[popUpButton titleOfSelectedItem]];
}

Наш результат:
Теперь когда мы введем текст в TextField - поле и нажмем кнопку добавить, то наш текст будет добавлен в выпадающий список элемент за элементом. Если мы выберем какой-то элемент из выпадающего списка, то этот текст отобразится в нашем Label.