I have used andrej's UISegmentedControl-based approach and expanded it a bit to behave more like a normal UIButton:
@interface SPWKBarButton : UISegmentedControl
- (id)initWithTitle:(NSString *)title;
- (void)setTitle:(NSString *)title;
@end
@implementation SPWKBarButton 
- (id)initWithTitle:(NSString *)title
{
    self = [super initWithItems:@[title]];
    if (self) {
        self.segmentedControlStyle = UISegmentedControlStyleBar;
        NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor]
                                                               forKey:UITextAttributeTextColor];
        [self setTitleTextAttributes:attributes
                            forState:UIControlStateNormal];
    }
    return self;
}
- (void)setTitle:(NSString *)title
{
    [self setTitle:title forSegmentAtIndex:0];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    if (CGRectContainsPoint(self.bounds, [[touches anyObject] locationInView:self])) {
        self.selectedSegmentIndex = 0;
    } else {
        self.selectedSegmentIndex = UISegmentedControlNoSegment;
    }
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];
    if (CGRectContainsPoint(self.bounds, [[touches anyObject] locationInView:self])) {
        [self sendActionsForControlEvents:UIControlEventTouchUpInside];
    }
    self.selectedSegmentIndex = UISegmentedControlNoSegment;
}
@end
For basic usage, you can use it as a UIButton drop-in replacement:
_button = [[SPWKBarButton alloc] initWithTitle:titles[0]];
[_button addTarget:self
            action:@selector(doSomething:)
  forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setTitleView:_button];
The event will only fire when the touchup happened inside the bounds of the segmented control. Enjoy.