2013-02-10 5 views
9

Мне нужно использовать NSPageController в каком-то проекте, но я понятия не имею, как это работает, не имеет ли у кого-нибудь времени какой-нибудь простой учебник, чтобы показать мне, потому что документация мне не помогает.Учебник NSPageController для Cocoa на OS X

забыл упомянуть: Я работаю на Mac project (НЕiOS)

ответ

19

Простой режим NSPageController книга учебник

Создать новую Cocoa Application -project. Откройте MainMenu.xib в построителе интерфейса и добавьте Изображение Ну и Ярлык объекты в окне вашего приложения. Также добавьте Контроллер страницы объект.

Set вид страница контроллер к точке изображений Ну.


Добавить несколько изображений в Images.xcassets

Я использовал три изображения в этом примере проекта:

  • first.png
  • second.png
  • треть. png

MyAppDelegate.h

Добавить ссылающихся выходы для Page Controller, этикетки и Image Ну. Set MyAppDelegate: NSPageControllerDelegate и добавляйте также NSArray для изображений. После этого ваш файл MyAppDelegate.h должен выглядеть следующим образом:

@interface MyAppDelegate : NSObject <NSApplicationDelegate, NSPageControllerDelegate> 

@property (assign) IBOutlet NSWindow *window; 
@property (unsafe_unretained) IBOutlet NSPageController *pageController; 
@property (weak) IBOutlet NSImageView *imageView; 
@property (weak) IBOutlet NSTextField *infoLabel; 

@property (nonatomic) NSArray *imageArray; 

@end 

MyAppDelegate.м

Некоторые инициализации:

- (void)awakeFromNib { 
    _imageArray = @[ [NSImage imageNamed:@"first"], 
        [NSImage imageNamed:@"second"], 
        [NSImage imageNamed:@"third"]]; 

    /* Set delegate for NSPageControl */ 
    [_pageController setDelegate:self]; 
    /* Set arranged objects for NSPageControl */ 
    [_pageController setArrangedObjects:_imageArray]; 
    /* Set transition style, in this example we use book style */ 
    [_pageController setTransitionStyle:NSPageControllerTransitionStyleStackBook]; 

    /* Set info label's text */ 
    NSString *info = [NSString stringWithFormat:@"Image %ld/%ld", ([_pageController selectedIndex]+1), [_imageArray count]]; 
    [_infoLabel setStringValue:info]; 
} 

Page Controller методы делегата:

- (void)pageController:(NSPageController *)pageController didTransitionToObject:(id)object { 
    /* When image is changed, update info label's text */ 
    NSString *info = [NSString stringWithFormat:@"Image %ld/%ld", ([_pageController selectedIndex]+1), [_imageArray count]]; 
    [_infoLabel setStringValue:info]; 
} 

- (NSString *)pageController:(NSPageController *)pageController identifierForObject:(id)object { 
    /* Returns object's array index as identiefier */ 
    NSString *identifier = [[NSNumber numberWithInteger:[_imageArray indexOfObject:object]] stringValue]; 
    return identifier; 
} 

- (NSViewController *)pageController:(NSPageController *)pageController viewControllerForIdentifier:(NSString *)identifier { 
    /* Create new view controller and image view */ 
    NSViewController *vController = [NSViewController new]; 
    NSImageView *iView = [[NSImageView alloc] initWithFrame:[_imageView frame]]; 

    /* Get image from image array using identiefier and set image to view */ 
    [iView setImage:(NSImage *)[_imageArray objectAtIndex:[identifier integerValue]]]; 
    /* Set image view's frame style to none */ 
    [iView setImageFrameStyle:NSImageFrameNone]; 

    /* Add image view to view controller and return view controller */ 
    [vController setView:iView]; 
    return vController; 
} 

И это сделано


Если _pageController является нулевым/нолем

Подключите контроллер страницы к _pageController нажатия ctrl и перетаскивания мышью _pageController в MyAppDelegate.h файле.

+0

Не получается, чтобы это сработало. Я подозреваю, что это связано с тем, как были добавлены изображения. Я просто вытащил их из искателя на xcasset. NSlog показывает изображения в массиве. Но _pageController возвращает Null, когда я проверяю его упорядоченные объекты. – markhunte

+0

@markhunte Я добавил изображения в .xcassets, используя Import ..., если это имеет значение, из всплывающего меню при нажатии второй кнопки мыши в списке содержимого активов – juniperi

+0

Просто сделал это. То же самое. Я использую ваш точный код. – markhunte

Смежные вопросы