ios - 根据另一个 NSbutton 以编程方式设置 NSButton 属性

标签 ios objective-c macos user-interface nsbutton

我有一个 viewController xib 文件,我在其中设计了一个具有以下特征的按钮(取自 xib 文件)

<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HKv-Bv-6j3">
    <rect key="frame" x="126" y="9" width="250" height="32"/>
    <buttonCell key="cell" type="push" title="Disable" bezelStyle="rounded" alignment="center"
 borderStyle="border" imageScaling="proportionallyDown" inset="2" id="YYS-ZL-U1e">
        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
        <font key="font" metaFont="system"/>
     </buttonCell>
</button>

现在我希望以编程方式添加任意数量的类似设计按钮。如何将上面的 XML 转换为 Objective-C 代码。

最佳答案

“在黑暗中摸索”方法

XML 标记都与 NSButton 上的属性或方法有关。 .有些是自定义设置,例如 frame .其他是默认值(例如使用系统字体),在这种情况下您不必显式设置它们。请注意,还有一些不同的对象 - NSButtonCell是这种组合的一部分(buttonCell XML 对象)。您不需要单独实例化它,但您可以在其中找到一些属性。你会做这样的事情:

frame = NSMakeRect(126, 9, 250, 32); // x, y, width height
myButton = [[NSButton alloc] initWithFrame:frame];
myButton.translatesAutoresizingMaskIntoConstraints = NO;
myButton.title = @"Disable";
myButton.bezelStyle = NSBezelStyleRounded;
myButton.alignment = NSTextAlignmentCenter;
myButton.imageScaling = NSImageScaleProportionallyDown; // default value
...

这不是一个完整的复制品,但你应该明白。请注意,其中一些属性在 NSButton 中定义。 ,但其他(如 alignment )在父类(super class)中定义,例如NSControl .

cocoa 之路

这是一种方法。一个更“ cocoa ”的解决方案是使用单个按钮创建一个 XIB 文件并根据您的喜好对其进行配置。然后,当您想要它的副本时,加载 XIB 并获取它:
NSButton *myButton;
NSArray *topLevelObjects;
[[NSBundle mainBundle] loadNibNamed:@"MyCustomButton"
                              owner:self
                    topLevelObjects:&topLevelObjects];
for (id a in topLevelObjects) {
    if ([a isKindOfClass:NSView.class]) {
        myButton = a;
        break;
    }
}

如果您只在 XIB 中放置一个按钮,则不需要专用 Controller 。上面的代码加载 XIB 然后获取第一个 NSView它找到了,这是你的按钮。我比上面的方法更喜欢这种方法,因为 a)您不必将 XML 解码为一系列代码语句,b)您可以随时在 Interface Builder 中更改按钮的属性,以及 c)一旦您已加载按钮,然后您可以复制它。

关于ios - 根据另一个 NSbutton 以编程方式设置 NSButton 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61385166/

相关文章:

ios - 导航栏出现白线

objective-c - Objective-C : Detecting Leakages via Instruments in Xcode

excel - 从 Excel 中打开 Word 文档(Office 2016 和 MacOS)

cocoa - 如何在 Mac 上以编程方式读取 Chrome 和 Firefox 的缓存?

c++ - 如何让 Qt Creator 添加 CEF 框架到 Mac OS X 上的 DEST_DIR?

ios - 带有 Storyboard的 UIViewController 和 UITabBarControllers

ios - UIContextualAction 显示 UIMenu

ios - 修剪 NSString

objective-c - 如何从 Objective-C 访问我的 Swift 单例

objective-c - C 或 Objective-C 中的数组边界检查技术