Простой режим 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
файле.
Не получается, чтобы это сработало. Я подозреваю, что это связано с тем, как были добавлены изображения. Я просто вытащил их из искателя на xcasset. NSlog показывает изображения в массиве. Но _pageController возвращает Null, когда я проверяю его упорядоченные объекты. – markhunte
@markhunte Я добавил изображения в .xcassets, используя Import ..., если это имеет значение, из всплывающего меню при нажатии второй кнопки мыши в списке содержимого активов – juniperi
Просто сделал это. То же самое. Я использую ваш точный код. – markhunte