semplice modalità libro NSPageController esercitazione
Crea nuovo Cocoa Application -project. Aprire MainMenu.xib
nel generatore di interfacce e aggiungere Immagine Bene e Etichetta oggetti nella finestra dell'applicazione. Aggiungi anche Oggetto controllore di pagina.
Set visualizzazione Pagina di controllo di al punto Immagine Bene.
aggiungere alcune immagini per Images.xcassets
ho usato tre immagini in questo progetto di esempio:
- first.png
- second.png
- terzo. png
MyAppDelegate.h
Aggiungi punti fanno riferimento per pagina Controller, Label e Immagine Bene. Impostare MyAppDelegate
come NSPageControllerDelegate
e aggiungere anche NSArray
per le immagini. Dopo questo il file MyAppDelegate.h
dovrebbe essere simile a questo:
@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
Alcuni di inizializzazione:
- (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];
}
pagina Controller metodi delegato:
- (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;
}
Ed è fatto
Se il _pageController è nullo/nullo
Collegare il controller pagina per _pageController premendo ctrl
e trascinando con il mouse per _pageController in MyAppDelegate.h
file.
Non farlo funzionare. Sospetto che abbia a che fare con il modo in cui sono state aggiunte le immagini. Li ho semplicemente trascinati dal finder al xcasset. NSlog mostra le immagini nella matrice. Ma _pageController restituisce Null quando controllo che sia organizzatoOggetti .. – markhunte
@markhunte Ho aggiunto immagini a .xcassets utilizzando Import ..., se è importante, dal menu popup quando si fa clic con il secondo pulsante del mouse nell'elenco delle risorse della risorsa – juniperi
Lo ha fatto anche. Stessa cosa. Sto usando il tuo codice esatto. – markhunte