Я хотел добавить что-то к выделенному решению. Если вы сделаете этот подкласс, он не будет выполнять сегментированные и расщепленные сегменты и селекторы, которые назначены UIBarButtonItem. Кроме того, свойства 'target' и 'action' не установлены в UIBarButtonItem, поэтому вы не можете получить к ним доступ из подкласса и назначить их для UIButton.
Я решил эту проблему, добавив в свой подкласс 2 свойства (используя ARC):
@property (nonatomic, weak) id targetViewController;
@property (nonatomic, strong) NSString *segueIdentifier;
Затем, в инициализации вашего подкласса, добавьте что-то вроде этого к принятому коду ответа:
[button addTarget:self action:@selector(performAction) forControlEvents:UIControlEventTouchUpInside];
и функция:
- (void)performAction {
if (_targetViewController && _segueIdentifier) {
[_targetViewController performSegueWithIdentifier:_segueIdentifier sender:self];
} else {
NSLog(@"Requires targetViewController and segueIdentifier to be set");
}
}
наконец, в вашем главном контроллере представления, который содержит все это, в 'viewDidLoad', добавьте это:
_fancyBarButtonItem.segueIdentifier = @"NewTransaction";
_fancyBarButtonItem.targetViewController = self;
Надеюсь, что это поможет кому-то еще сэкономить время, когда они начнут идти по этому пути с раскадровками / iOS5