gpt4 book ai didi

objective-c - 如何获取父控件属性?

转载 作者:行者123 更新时间:2023-12-03 17:51:00 25 4
gpt4 key购买 nike

我正在尝试以编程方式生成一组类似的控件并将事件绑定(bind)到它们。事件逻辑将根据多个控件属性来创建。所以,我写了这个:

// Create zero root folder controls
for (SubFolderType* subFolder in rootFolder.subFolders)
{
FolderControl* folderControl = [[FolderControl alloc] initWithNibName:@"FolderControl" bundle:nil type:subFolder.type title:subFolder.name rootLevel:0];

// positioning
[folderControl view].frame = CGRectMake(30, 200 - iterator*40, 250, 40);
[folderControl view].wantsLayer = YES;
[[folderControl view] setShadow:shadow];
[folderControl view].layer.backgroundColor = [[NSColor whiteColor] CGColor];
// bind to self and add action
[folderControl.DiclosureControl setTarget:self];
[folderControl.DiclosureControl setAction:@selector(DiclosureControl_Click:)];

// add to view as subview
[dialogControl.view addSubview:[folderControl view]];
iterator++;
}

FolderControl 是一个自定义控件,它有多个属性,例如 title 或 rootLevel。该事件绑定(bind)到显示三角形,它应该生成控件的下一个根级别。

所以,它看起来像:

- (IBAction) DiclosureControl_Click : (NSButton*) sender {
// How to get folderControl properties here?
NSView *parentView = [sender superview]; // That's a NSView object, how can I get FolderControl type, which is NSViewController?
// generate the next level of controls
}

问题是,发送者是一个公开按钮,它是一个简单的 NSButton。如何在此处获取父控件 (FolderControl) 属性?

我明白了,根据this questionthis one我无法使用 setAction 直接传递参数。如何解决这个问题?

<小时/>

更新:

所以,我在DiclosureControl_Click事件中犯了一个错误,认为发送者是FolderButton类型,而且它只是一个按钮。我已经重新表述并更新了问题。

最佳答案

非常确定,如果您不在任何地方存储 FolderControl 实例,它们将会被释放,因为 View 对 View Controller 没有强引用。

所以改变你的代码,这样你不仅可以:

[dialogControl.view addSubview:[folderControl view]];

但是某种或:

[dialogControl.folderControllers addObject:folderControl];

这样你就可以做到:

folderController.DiclosureControl.tag = [dialogControl.folderControllers indexOfObject:folderControl];

...
- (IBAction) DiclosureControl_Click : (NSButton*) sender {
FolderController *controller = dialogControl.folderControllers[sender tag];
...
}

关于objective-c - 如何获取父控件属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419661/

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