Per Swift 2.0, questa era la mia soluzione per ottenere il seguente effetto ...
(i valori effettivi potrebbero essere diversi, a seconda della situazione)
let captureButton = UIButton()
captureButton.setTitle("CAPTURE DETAILS", forState: .Normal)
captureButton.frame = CGRectMake(0, 0, 200, 95)
captureButton.addTarget(self, action: Selector("showCaptureDetailsForm:"), forControlEvents: .TouchUpInside)
captureButton.setBackgroundImage(UIImage(named: "blueTopRight"), forState: .Normal)
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = captureButton
let negativeSpacer = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil)
negativeSpacer.width = -25;
self.navigationItem.setRightBarButtonItems([negativeSpacer, rightBarButton ], animated: false)
AGGIORNAMENTO Swift 2.2:
Per Swift 2.2, il action: Selector
metodo è cambiato e deve essere digitato come segue
captureButton.addTarget(self, action: #selector(YourViewController.showCaptureDetailsForm(_:)), forControlEvents: .TouchUpInside)