سؤال

ما هي أفضل طريقة لإنشاء nsbutton مع صورة خلفية مخصصة ، والتي يمكن أن يكون لها عرض متغير ، دون أن تبدو الزاوية مديرة ممتدة؟ أعلم أن هناك طرقًا ملائمة للقيام بذلك مع Uibultdon: http://jainmarket.blogspot.com/2009/04/create-uibuttonbutton-with-images.html لكنني لم أر أي شيء مشابه في NSButton.

هل كانت مفيدة؟

المحلول

كنت بحاجة إلى الحصول على خلفية زر مخصصة ، وإليك كيف فعلت ذلك. لقد قمت بعمل فئة فرعية NSBUTTON وأسلوب السحب المتجاوز:

- (void)drawRect:(NSRect)dirtyRect
{
    // My buttons don't have a variable height, so I make sure that the height is fixed
    if (self.frame.size.height != 22) {
        self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width,
                                22.0f);
    }
    // 
    switch (self.state) {
            // Onstate graphics
        case NSOnState:
            NSDrawThreePartImage(self.bounds, 
                                 [NSImage imageNamed:@"btnmain_lb_h.png"], [NSImage imageNamed:@"btnmain_bg_h.png"], [NSImage imageNamed:@"btnmain_rb_h.png"],
                                 NO, NSCompositeSourceAtop, 1.0, NO);
            // Offstate graphics
        default:
        case NSOffState:
            NSDrawThreePartImage(self.bounds, 
                                 [NSImage imageNamed:@"btnmain_lb.png"], [NSImage imageNamed:@"btnmain_bg.png"], [NSImage imageNamed:@"btnmain_rb.png"],
                                 NO, NSCompositeSourceAtop, 1.0, NO);
            break;
    }

    [super drawRect:dirtyRect];
}

بعد ذلك ، يمكنني وضع الأزرار باستخدام Builder Interface ، وللحصول على الرسومات المخصصة ، علي فقط تغيير الفصل إلى الفئة الفرعية الجديدة.

نصائح أخرى

هذا عمل بشكل جيد بالنسبة لي:

[self.addBuddyCommitButton.cell setBezelStyle:NSRoundedBezelStyle];

NSButton ليس لديه نفس طرق الراحة لصور الخلفية مثل UIButton (وهو أمر غريب وهنا على أمل جسور Apple تلك الفجوة). ستحتاج إلى إنشاء زر مخصص NSView والتعامل مع العرض المتغير والزوايا بنفسك. لا أعتقد أن الأمر سيكون سهلاً ، لكنني لا أعتقد أنه سيكون من الصعب للغاية أيضًا.

يشرح هذا الفيديو طريقة يبدو أنها بسيطة وتتطلب صورة واحدة فقط للزر: http://youtu.be/7mzjxpoo_xu

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top