Trong bộ dựng giao diện, có một cách để đặt "số nhận dạng" của NSView. Trong trường hợp này, tôi sẽ sử dụng mã định danh "54321" làm chuỗi định danh.
NSView Tuân thủ các NSUserInterfaceItemIdentification Protocol, mà là một định danh duy nhất như một NSString. Bạn có thể đi qua hệ thống phân cấp khung nhìn và tìm NSView với mã định danh đó.
Vì vậy, để xây dựng về bài đăng này về việc nhận danh sách các NSViews, Get ALL views and subview of NSWindow, sau đó bạn có thể tìm thấy những NSView với nhận dạng bạn muốn:
- (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;
}
Hoặc, kể từ khi bạn đang sử dụng một lớp con NSView, bạn có thể đặt "thẻ" của mỗi chế độ xem khi chạy. (Hoặc, bạn có thể đặt số nhận dạng tại thời gian chạy.) Điều tuyệt vời về thẻ, là có một hàm được tạo sẵn để tìm một chế độ xem với một thẻ cụ thể.
// set the tag
NSInteger tagValue = 12345;
[self.myButton setTag:tagValue];
// find it
NSButton *myButton = [self.window.contentView viewWithTag:12345];
Nguồn
2013-04-25 21:37:05
Điều đó thật tuyệt vời, cảm ơn gợi ý! Tôi sẽ thử xem. Than ôi, không có gì được xác định trước trong vani ca cao NSView có thể được sử dụng nhưng tôi đoán tôi vẫn còn suy nghĩ quá nhiều trong một cách PowerPlant/MFC ;-) – Jay
Trả lời dưới đây không làm việc cho một cái nhìn chung chung. Đơn giản chỉ cần thiết lập Identifer trong xib và truy cập nó theo lập trình với view.identifier – Colin
Bất kỳ ý tưởng logic đằng sau thẻ được đọc chỉ trong NSView là gì? – Mercurial