मैं मुख्य विंडो के लिए एक xib है में कहा जाता है प्रस्तुत नहीं होती, और मैं निम्न चरणों में एक कस्टम दृश्य बनाया:कस्टम इंटरफ़ेस निर्माता द्वारा बनाए गए दृश्य जब अन्य विचारों
- एक नया वर्ग है जहाँ से विरासत में बनाएं
NSView
।
MyView.h
:
#import <Cocoa/Cocoa.h>
IB_DESIGNABLE
@interface MyView : NSTableCellView
@end
MyView.m
:
#import "MyView.h"
@implementation MyView
- (void)awakeFromNib {
NSLog(@"Post view awaking from nib.");
}
@end
- एक नया xib बनाएँ, और ऊपर बनाया वर्ग के लिए रूट दृश्य की कक्षा निर्धारित किया है। और उस xib में डिजाइन।
- xib से कक्षा में आउटलेट सेट करें।
और मैं निम्न चरणों में इस कस्टम दृश्य का उपयोग करने के मुख्य विंडो में करने की कोशिश की:
- खींचें मुख्य विंडो के xib के लिए एक कस्टम दृश्य।
- ऊपर दिए गए वर्ग में उस कस्टम दृश्य की कक्षा सेट करें।
लेकिन कुछ भी प्रस्तुत नहीं करता है। लॉग से, मैं देख सकता हूं कि कस्टम व्यू क्लास से awakeFromNib
में कोड निष्पादित किया गया है। जब मैं कक्षा को IB_DESIGNABLE
पर सेट करता हूं, तो दृश्य मुख्य विंडो के xib में खाली हो जाता है, जो मैंने डिज़ाइन किया है उससे भिन्न है।
मैंने कस्टम क्लास के xib को कस्टम क्लास में फ़ाइल स्वामी सेट करने का प्रयास किया, लेकिन कुछ भी नहीं बदला।
मुझे लगता है कि समस्या यह है कि कस्टम दृश्य की xib फ़ाइल वास्तव में लोड नहीं होती है। जब मैंने इसे गुगल किया, तो इस सटीक विषय पर कुछ संदर्भ होने लगते हैं। तो, मुझे वास्तव में इस लक्ष्य को कैसे प्राप्त करना चाहिए? यानी, आईबी में एक दृश्य तैयार करें, कक्षा में अपनी विधियों को लागू करें, इन दोनों को जोड़ दें, और अन्य xibs में उपयोग के लिए सिस्टम दृश्य की तरह इसे बेनकाब करें?
अद्यतन:
मैं एक ट्यूटोरियल एहसास होता है और क्या मैं (जब बनाया सही ढंग से दृश्य प्रतिपादन के लिए) की कमी है। मैं दृश्य वर्ग के लिए दृश्य से एक आउटलेट को जोड़ने के लिए xib में है:
@property (nonatomic, strong) IBOutlet NSView *view;
, और फिर (id)initWithCoder:(NSCoder *)coder
विधि में लोड।
[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self topLevelObjects:nil];
[self addSubview:self.view];
लेकिन दृश्य अभी भी इंटरफ़ेस निर्माता में प्रस्तुत नहीं करेगा।
बस एक छोटी सी टिप्पणी: आपके आईबीऑलेट्स (विशेष परिस्थितियों में) हमेशा कमजोर होना चाहिए। संदर्भ निब लोडर के स्वामित्व का कारण है। – Kelsey
इसके अलावा, आप "एनएसवी व्यू से विरासत में प्राप्त एक नई कक्षा" नहीं बना रहे हैं, वास्तव में, यह वास्तव में एनएसटीबलसेलव्यू से विरासत में है। एनएसटीबलसेलव्यू क्या कर रहा है, यह नहीं बता रहा है, तो हो सकता है कि आप अभी एनएसवी व्यू के लिए अपना कोड सरल बना सकें? – Kelsey
आईओएस लोड में देखने के लिए एक और चीज, NNNNamed: वास्तव में दृश्यों की एक सरणी देता है, वास्तविक दृश्य नहीं। तो वापसी की जांच करें। एनएसएआरएआरई * विचार = [[एनएसबंडल मेनबंडल] loadNibNamed: @ "MyView" स्वामी: self topLevelObjects: nil]; MyView * myView = विचार [0]; – Kelsey