سؤال

كيف يمكنني رسم زر مع الكوارتز التي لديها بالضبط نفس النمط كما UIBarButtonItem.زر أن يكون قادرا على إظهار ألوان مختلفة.أنا تحميل Three20 المشروع ، ولكن هذا المشروع هو معقد جدا, كنت في حاجة الى الكثير من الوقت نتغاضى عن كل إطار.أنا فقط أريد أن ألفت مخصص UIBarButtonItem.

شكرا على المساعدة.

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

المحلول

إذا كنت تستخدم مكتبة Three20، أعتقد TTButton في "toolbarButton" الاسلوب هو ما تريد. TTButton هو من الدرجة فرعية من UIButton، لكنه يسمح لك لتطبيق أساليب تماما مثل استخدام المغلق أثناء إنشاء صفحة ويب.

لإنشاء زر مثل UIBarButtonItem، مجرد دعوة

[TTButton buttonWithStyle:@"toolbarButton:" title:@"Title"]

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

نصائح أخرى

وحاول UISegmentedControl مع جزء واحد فقط واختيار لحظة. وهو يدعم tintColor وقد يكون كافيا وثيقة لأغراضك.

في سويفت 4.1

يمكنك إضافة المخصصة الخاصة بك مع التصاميم الخاصة بك/الرسوم المتحركة/الألوان/ ... الخ باستخدام Quartz2D على النحو التالي.

  • إنشاء عرض مخصص مع العرف الكوارتز الاشياء
  • إضافة UIBarButtonItem مع customView
  • إضافة بروتوكول (سوف تحتاج إلى ذلك ، لأن UIBarButtonItem تهيئة خفة دم customView يتوقع أجل التعامل مع تفاعلات المستخدم وبالتالي لا توفر وسيلة لتحديد الهدف/محدد)

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

لا تنس أن تضيف أن الرأي يجب أن تتوافق مع البروتوكول (CameraButtonDelegate في هذه الحالة) و أيضا لإضافة طريقة cameraButtonChanged(to:) لالتقاط تفاعلات المستخدم

func setupButton() {
   customView = CameraButton()
   customView.frame = CGRect(x: 0, y: 0, width: 25, height: 25)
   customView.delegate = self
   let barButtonItem = UIBarButtonItem(customView:customView)
   self.navigationItem.rightBarButtonItem = torchItem
}

protocol CameraButtonDelegate {
    func cameraButtonChanged(to state:Bool)
}
class CameraButton: UIView {
    var delegate: CameraButtonDelegate?
    var active: Bool = false    
    var strokeColor = UIColor.gray
    init() {
        self.init()
        self.backgroundColor = .clear
    }
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.active = self.active ? false : true
        self.strokeColor = self.active ? UIColor.blue : UIColor.gray
        setNeedsDisplay()
    }
    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.delegate?.cameraButtonChanged(to: self.active)
    }
    override func draw(_ rect: CGRect) {
        let context = UIGraphicsGetCurrentContext()
        context?.setStrokeColor(strokeColor.cgColor)
        context?.setLineWidth(1.0)
        // Add your Quartz stuff here
        context?.strokePath()
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top