Пользовательский UIBarButtonItem с кварцем

Как я могу нарисовать кнопку с кварцем, которая имеет тот же стиль, что и UIBarButtonItem. Кнопка должна иметь возможность отображать разные цвета. Я загрузил проект Three20, но этот проект действительно сложный, вам понадобится много времени, чтобы просмотреть всю структуру. Я просто хочу нарисовать собственный UIBarButtonItem.

Спасибо за помощь.


person burki    schedule 13.02.2010    source источник


Ответы (3)


Если вы используете библиотеку Three20, я думаю, что стиль "toolbarButton" TTButton - это то, что вам нужно. TTButton - это подкласс UIButton, но он позволяет применять стили так же, как при использовании css при создании веб-страницы.

Чтобы создать кнопку, подобную UIBarButtonItem, просто вызовите

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

Возможно, вам потребуется сохранить ее, поскольку кнопка является объектом с автоматическим выпуском.

person zonble    schedule 15.03.2010

Попробуйте UISegmentedControl только с одним сегментом и мгновенным выбором. Он поддерживает tintColor и может быть достаточно близок для ваших целей.

person Kirk van Gorkom    schedule 06.03.2010

В Swift 4.1

Вы можете добавить свой собственный вид с вашими собственными дизайнами / анимацией / цветами / и т. Д., Используя Quartz2D, как показано ниже.

  • Создайте свой собственный вид с помощью пользовательских материалов Quartz
  • Добавьте свой 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()
    }
}
person eharo2    schedule 23.07.2018