У меня есть несколько контроллеров представлений и контроллеров табличного представления, которые я выталкиваю из своего контроллера корневого представления. Во всех этих случаях я бы хотел использовать пользовательскую кнопку возврата в навигационном контроллере. Вместо того, чтобы копировать метод для настройки моей кнопки возврата в каждый класс, файл, я создал вспомогательный класс с методом класса, который выполняет настройку. Ниже приведен код, но мне интересно, не ошибаюсь ли я в этом. Есть ли лучший способ достичь этого? Кроме того, я все еще дублирую метод myCustomBack (void) во всех своих классах и задаюсь вопросом, есть ли способ избежать этого.Каков наилучший способ совместного использования методов в классах Objective C?
@interface NavBarBackButtonSetterUpper : NSObject
+ (UIButton *)navbarSetup:(UIViewController *)callingViewController;
@end
@implementation NavBarBackButtonSetterUpper
+ (UIButton *)navbarSetup:(UIViewController *)callingViewController
{
callingViewController.navigationItem.hidesBackButton = YES;
UIImage *backButtonImage = [[UIImage imageNamed:@"back_button_textured_30"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 5)];
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
[backButton setBackgroundImage:backButtonImage forState:UIControlStateNormal];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
backButton.titleLabel.font = [UIFont fontWithName:@"AmericanTypewriter-Bold" size:12];
backButton.titleLabel.shadowOffset = CGSizeMake(0,-1);
UIView *customBackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
[customBackView addSubview:backButton];
callingViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customBackView];
return backButton;
}
@end
@interface MyCustomTableViewController : UITableViewController
@end
@implementation MyCustomTableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *backButton = [NavBarBackButtonSetterUpper navbarSetup:self];
[backButton addTarget:self action:@selector(myCustomBack) forControlEvents:UIControlEventTouchUpInside];
}
- (void)myCustomBack
{
[self.navigationController popViewControllerAnimated:YES];
}
@end
@interface MyCustomViewController : UIViewController
@end
@implementation MyCustomViewController
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *backButton = [NavBarBackButtonSetterUpper navbarSetup:self];
[backButton addTarget:self action:@selector(myCustomBack) forControlEvents:UIControlEventTouchUpInside];
}
- (void)myCustomBack
{
[self.navigationController popViewControllerAnimated:YES];
}
@end
Хороший выбор. Эта модель мне очень понравилась, и я никогда не сожалел об этом. Поскольку я замечаю, что это ваш первый вопрос, вы должны пометить ответ как принятый, нажав галочку. Либо Джош Касуэлл, либо ваш собственный ответ сделали бы хороший выбор на мой взгляд, но это ваше решение в одиночку, очевидно. Хороший первый вопрос, надеюсь, что вы продолжаете вносить свой вклад, удачи. –
@CarlVeazey - спасибо! Поскольку это мой первый вопрос, я все еще немного сомневаюсь в правильном этикете для маркировки ответа. Я прочитал все ответы и принял их во внимание, когда я пошел, и исследовал, как создать категорию. Кроме того, я хотел дождаться ответов и возможного лучшего решения проблемы. Но на данный момент я думаю, что у меня хорошо работает. – Dylan