私はルートビューコントローラからプッシュするいくつかのビューコントローラとテーブルビューコントローラを持っています。これらのすべてで、ナビゲーションコントローラでカスタムの戻るボタンを使用したいと思います。私の戻るボタンを各クラスファイルに設定するメソッドをコピーする代わりに、セットアップを行うクラスメソッドでヘルパークラスを作成しました。下のコードはうまくいきますが、私はこれを間違った方法で行っているのだろうかと思います。これを達成するより良い方法はありますか?また、私はまだすべてのクラスで - (void)myCustomBackメソッドを複製していますが、それを回避する方法があるかどうか疑問に思っていました。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