2013-02-10 13 views
9

पर कोको के लिए एनएसपीएज कंट्रोलर ट्यूटोरियल मुझे कुछ परियोजनाओं में NSPageController का उपयोग करने की आवश्यकता है, लेकिन मुझे नहीं पता कि यह कैसे काम करता है, क्या किसी के पास मुझे दिखाने के लिए कुछ सरल ट्यूटोरियल का समय है क्योंकि दस्तावेज मेरी मदद नहीं कर रहा है।ओएस एक्स

उल्लेख करने के लिए भूल: मैं Mac project (नहींiOS)

उत्तर

19

सरल NSPageController पुस्तक मोड ट्यूटोरियल पर काम कर रहा हूँ

नई कोको आवेदन -Project बनाएँ। इंटरफ़ेस बिल्डर में MainMenu.xib खोलें और छवि अच्छी तरह से और लेबल ऑब्जेक्ट्स को अपनी एप्लिकेशन विंडो में जोड़ें। पृष्ठ नियंत्रक ऑब्जेक्ट भी जोड़ें।

सेट पृष्ठ नियंत्रक दृश्य इंगित करने के लिए छवि ठीक है


Images.xcassets

लिए कुछ छवियों जोड़े मैं इस नमूने परियोजना में तीन छवियों का इस्तेमाल:

  • first.png
  • second.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 रिक्त है/

शून्य ctrl दबाकर और MyAppDelegate.h फ़ाइल में _pageController करने के लिए माउस के साथ खींचकर _pageController करने के लिए अपने पृष्ठ नियंत्रक से कनेक्ट करें।

+0

यह काम करने के लिए नहीं मिल रहा है। मुझे संदेह है कि छवियों को कैसे जोड़ा गया है इसके साथ कुछ करना है। मैंने उन्हें खोजक से एक्सकैसेट तक खींच लिया। एनएसएलएल सरणी में छवियों को दिखाता है। लेकिन जब मैं इसे व्यवस्थित करता हूं तो _pageController शून्य देता है ऑब्जेक्ट्स .. – markhunte

+0

@markhunte मैंने आयात सामग्री का उपयोग कर .xcassets में छवियों को जोड़ा ... यदि यह महत्वपूर्ण है, तो पॉपअप मेनू से, संपत्ति सामग्री सूची में दूसरे माउस बटन के साथ क्लिक करते समय – juniperi

+0

बस यह भी किया। वही चीज। मैं आपका सटीक कोड उपयोग कर रहा हूं। – markhunte