我有几个视图控制器和表视图控制器,我从根视图控制器推。在所有这些中,我想在导航控制器中使用自定义后退按钮。而不是复制方法来设置我的后退按钮到每个类,文件中,我创建了一个辅助类和一个类方法来完成设置。下面的代码工作,但我想知道如果我以错误的方式去做。有没有更好的方法来实现这一目标?另外,我仍然在所有类中复制 - (void)myCustomBack方法,并且想知道是否有办法避免这种情况。目标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