루트보기 컨트롤러에서 밀어 넣는 여러 개의보기 컨트롤러와 테이블보기 컨트롤러가 있습니다. 이 모든 것들은 네비게이션 컨트롤러에서 커스텀 뒤로 버튼을 사용하고 싶습니다. 각 클래스, 파일에 내 뒤로 단추를 설정하는 메서드를 복사하는 대신 설치를 수행하는 클래스 메서드로 도우미 클래스를 만들었습니다. 아래의 코드는 작동하지만 잘못된 방향으로 가고 있는지 궁금합니다. 이것을 달성하기위한 더 좋은 방법이 있습니까? 또한, 나는 여전히 모든 클래스에서 - (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
좋은 선택. 이 패턴은 나에게 매우 도움이되었고 나는 결코 그것을 사용하는 것을 후회하지 않았다. 이것이 첫 번째 질문임을 알기 때문에 체크 표시를 클릭하여 대답을 표시해야합니다. 조쉬 캐스 웰 (Josh Caswell)이나 자신의 대답이 내 견해로는 좋은 선택이 될 것이지만, 그것은 분명히 혼자의 결정입니다. 좋은 첫 번째 질문, 행운을 기원하며 계속 기여할 수 있기를 바랍니다. –
@CarlVeazey - 감사합니다! 이것이 나의 첫 번째 질문이기 때문에, 나는 대답을 표시하기위한 적절한 에티켓에 대해 여전히 조금 확신하지 못하고있다. 나는 카테고리를 만드는 방법을 연구하고 연구하는 동안 모든 대답을 읽고 모두 고려했습니다. 또한, 나는 응답을 기다리고 싶었고 문제에 대한 가능한 더 나은 해결책을 원했습니다. 그러나이 시점에서 나는 내가 가진 것이 잘 작동한다고 생각합니다. – Dylan