इंटरफ़ेस बिल्डर में, एनएसवी व्यू के "पहचानकर्ता" को सेट करने का एक तरीका है। इस मामले में, मैं पहचानकर्ता स्ट्रिंग के रूप में पहचानकर्ता "54321" का उपयोग करूंगा।
एनएसवी व्यू NSUserInterfaceItemIdentification Protocol पर अनुरूप है, जो एनएसएसटींग के रूप में एक अद्वितीय पहचानकर्ता है। आप दृश्य पदानुक्रम के माध्यम से चल सकते हैं और उस पहचानकर्ता के साथ एनएसवी व्यू ढूंढ सकते हैं।
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSView *viewToFind = [self viewWithIdentifier:@"54321"];
}
- (NSView *)viewWithIdentifier:(NSString *)identifier
{
NSArray *subviews = [self allSubviewsInView:self.window.contentView];
for (NSView *view in subviews) {
if ([view.identifier isEqualToString:identifier]) {
return view;
}
}
return nil;
}
- (NSMutableArray *)allSubviewsInView:(NSView *)parentView {
NSMutableArray *allSubviews = [[NSMutableArray alloc] initWithObjects: nil];
NSMutableArray *currentSubviews = [[NSMutableArray alloc] initWithObjects: parentView, nil];
NSMutableArray *newSubviews = [[NSMutableArray alloc] initWithObjects: parentView, nil];
while (newSubviews.count) {
[newSubviews removeAllObjects];
for (NSView *view in currentSubviews) {
for (NSView *subview in view.subviews) [newSubviews addObject:subview];
}
[currentSubviews removeAllObjects];
[currentSubviews addObjectsFromArray:newSubviews];
[allSubviews addObjectsFromArray:newSubviews];
}
for (NSView *view in allSubviews) {
NSLog(@"View: %@, tag: %ld, identifier: %@", view, view.tag, view.identifier);
}
return allSubviews;
}
, जब से तुम एक NSView उपवर्ग उपयोग कर रहे हैं, या आप:
तो, NSViews, Get ALL views and subview of NSWindow की सूची प्राप्त करने के बारे में इस पोस्ट पर निर्माण करने के लिए, आप तो NSView पहचानकर्ता आप चाहते हैं के साथ मिल सकता है रनटाइम पर प्रत्येक दृश्य का "टैग" सेट कर सकता है। (या, आप रन-टाइम पर पहचानकर्ता सेट कर सकते हैं।) टैग के बारे में अच्छी बात यह है कि एक विशिष्ट टैग के साथ दृश्य खोजने के लिए एक पूर्व-निर्मित फ़ंक्शन है।
// set the tag
NSInteger tagValue = 12345;
[self.myButton setTag:tagValue];
// find it
NSButton *myButton = [self.window.contentView viewWithTag:12345];
स्रोत
2013-04-25 21:37:05
यह बहुत अच्छा लगता है, संकेत के लिए धन्यवाद! मैं कोशिश करूँगा। हां, वेनिला कोको एनएसवीव में पूर्व-परिभाषित कुछ भी नहीं है जिसका उपयोग किया जा सकता है लेकिन मुझे लगता है कि मैं अभी भी पावरप्लेंट/एमएफसी तरीके से बहुत ज्यादा सोच रहा हूं ;-) – Jay
नीचे दिए गए उत्तर सामान्य दृश्य के लिए काम करता है। बस xib में पहचानकर्ता सेट करें और इसे प्रोग्राम के साथ प्रोग्रामेटिक रूप से एक्सेस करें। पहचानकर्ता – Colin
कोई विचार एनएसवी व्यू में टैग के पीछे तर्क के पीछे तर्क क्या है? – Mercurial