gpt4 book ai didi

objective-c - NSView 上的唯一 ID

转载 作者:太空狗 更新时间:2023-10-30 03:21:36 25 4
gpt4 key购买 nike

是否有任何类型的 ID 可以通过 Xcode 在 .nib/.xib 中使用和设置,可以在运行时查询以从代码中识别特定的 View 实例?

特别是当我们的界面中有同一个 NSView 子类的多个副本时,我们如何判断我们当前正在查看的是哪一个?

最佳答案

在 Interface Builder 中,有一种方法可以设置 NSView 的“标识符”。在这种情况下,我将使用标识符“54321”作为标识符字符串。

NSView 符合 NSUserInterfaceItemIdentification Protocol , 这是一个作为 NSString 的唯一标识符。您可以遍历 View 层次结构并找到具有该标识符的 NSView。

因此,在这篇关于获取 NSView 列表的帖子的基础上,Get ALL views and subview of NSWindow ,然后您可以找到具有所需标识符的 NSView:

- (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 子类,您可以在运行时设置每个 View 的“标签”。 (或者,您可以在运行时设置标识符。)关于标签的好处是,有一个预构建的函数用于查找具有特定标签的 View 。

// set the tag
NSInteger tagValue = 12345;
[self.myButton setTag:tagValue];

// find it
NSButton *myButton = [self.window.contentView viewWithTag:12345];

关于objective-c - NSView 上的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8492918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com