objective-c - OS X 上 Cocoa 的 NSPageController 教程

标签 objective-c macos cocoa

我需要在某些项目中使用 NSPageController 但我不知道它是如何工作的,有没有人有时间向我展示一些简单的教程,因为文档对我没有帮助。

忘记提及:我正在处理 Mac 项目(不是 iOS)

最佳答案

简单的NSPageController书本模式教程

创建新的 Cocoa 应用程序 - 项目。在界面生成器中打开 MainMenu.xib 并将 Image WellLabel 对象添加到您的应用程序窗口。同时添加 Page Controller 对象。

Page Controller 的 View 设置为指向Image Well


将一些图像添加到Images.xcassets

我在这个示例项目中使用了三个图像:

  • 第一个.png
  • 第二个.png
  • 第三个.png

MyAppDelegate.h

Page ControllerLabelImage Well 添加引用导出。将 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.m

一些初始化:

- (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];
}

页面 Controller 委托(delegate)方法:

- (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 为 null/nil

通过按 ctrl 并用鼠标拖动到 MyAppDelegate.h 文件中的 _pageController,将您的页面 Controller 连接到 _pageController。

关于objective-c - OS X 上 Cocoa 的 NSPageController 教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14801513/

相关文章:

objective-c - 对象在 presentModalViewController 之后返回 null

objective-c - 应用程序被拒绝 : crashes on launch , 但在所有设备上对我来说也能正常工作

iphone - NSDateFormatter 无法与 UTC 正常工作

ios - 如何将表格 View 单元格中的字体颜色更改为变量 UIColor?

macos - 在MacOS上编译Irrlicht项目时出现“symbol(s) not found for architecture x86_64”错误

ios - 最新版本的 Xcode 与 Mountain Lion 不兼容

objective-c - 如何使用每 N 秒更改 NSString 的值?

c++ - 关闭多线程 NSDocument

java - 我想了解 Mac os 上 eclipse 中的自动完成和快捷方式

cocoa - 拖放到 Cocoa 中的 Dock 图标上 - 弄乱文件关联