代码之家  ›  专栏  ›  技术社区  ›  Zohar81

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

  •  0
  • Zohar81  · 技术社区  · 6 年前

    <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代码。

    0 回复  |  直到 6 年前
        1
  •  1
  •   Demitri    6 年前

    在黑暗中摸索你的路

    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
    ...
    

    这不是完全的复制品,但你应该明白。请注意,其中一些属性是在中定义的 N按钮 alignment NSControl .

    可可之路

    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中放置一个按钮,则不需要专用控制器。上面的代码加载XIB,然后获取第一个 NSView 它找到了,那是你的按钮。我更喜欢这种方法,因为a)你不必把XML解码成一系列的代码语句;b)你可以随时在Interface Builder中更改按钮的属性;c)一旦加载了按钮,就可以复制它。