2013-02-10 83 views
9

我需要在某些項目中使用NSPageController,但我不知道它是如何工作的,有沒有人有時間給我一些簡單的教程來顯示我,因爲文檔沒有幫助我。OS X上的Cocoa的NSPageController教程

忘了提:我的工作Mac projectiOS

回答

19

簡單NSPageController書模式教程

新建Cocoa應用程序 - 項目。在界面構建器中打開MainMenu.xib,並將圖片加入標籤對象到您的應用程序窗口。還要添加頁面控制器對象。

頁面控制器的以點形象嘛


一些圖像添加到Images.xcassets

我以前在此示例項目三幅影像:

  • first.png
  • second.png
  • 第三。 png

MyAppDelegate.h

添加引用網點頁面控制器標籤形象嘛。將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]; 
} 

頁控制器的委託方法:

- (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是零/零

ctrlMyAppDelegate.h文件用鼠標拖動到_pageController連接你的頁面控制器用來_pageController。

+0

沒有得到這個工作。我懷疑它是如何添加圖像的。我只是將它們從查找器拖到xcasset。 NSlog顯示數組中的圖像。但_pageController返回空,當我檢查它的排列Objects .. – markhunte 2013-11-15 19:37:10

+0

@markhunte我添加圖像到.xcassets使用導入...,如果它很重要,從彈出菜單中單擊與資產內容列表中的第二個鼠標按鈕 – juniperi 2013-11-15 19:44:28

+0

剛纔也這樣做。一樣。我正在使用您的確切代碼。 – markhunte 2013-11-15 19:45:22