如何在文件之间重用相同的代码并选择在objective-c中传递参数?
Posted
技术标签:
【中文标题】如何在文件之间重用相同的代码并选择在objective-c中传递参数?【英文标题】:How do I reuse the same code between files with the option to pass in arguments in objective-c? 【发布时间】:2014-05-03 00:56:31 【问题描述】:我注意到我有一组UIViewController
用于产品过滤系统,它们使用完全相同的代码。这段代码基本上为UIToolBar
创建了按钮,并隐藏了提供它的控制器的UIToolBar
。唯一的区别是标题“refine by:.
在每个页面上,我都会在“refine by”之后显示页面类型,例如:在性别过滤页面上,它将显示“Refine by:然后我将附加另一个粗体字符串,显示“Gender " 对于产品类型页面,我将附加一个粗体字符串,上面写着“产品类型”等等。
以下是连接到这些控制器的每个自定义类中重复的代码:
@property (weak, nonatomic) IBOutlet UIToolbar *toolBar;
@end
@implementation VAGRefineProductTypeViewController
VAGRefineProductTypeViewController *_thisController;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
return self;
- (id)initWithCoder:(NSCoder *)aDecoder
self = [super initWithCoder:aDecoder];
if (self)
// Custom initialization
_thisController = self;
return self;
- (void)viewDidLoad
UIToolbar *toolBar = [_thisController toolBar];
[[_thisController navigationItem] setLeftBarButtonItem:nil];
[_thisController setTitle:@"R E F I N E B Y:"];
// Setup buttons for tool bar
UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(40, 3, 110, 38)];
UIButton *doneButton = [[UIButton alloc] initWithFrame:CGRectMake(170, 3, 110, 38)];
[clearButton setBackgroundColor:[UIColor darkGrayColor]];
[doneButton setBackgroundColor:[UIColor blackColor]];
[clearButton setTitle:@"Clear" forState:UIControlStateNormal];
[doneButton setTitle:@"Done" forState:UIControlStateNormal];
[clearButton addTarget:_thisController action:@selector(clearButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
[doneButton addTarget:_thisController action:@selector(doneButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
// Add buttons to toolbar
[toolBar addSubview:clearButton];
[toolBar addSubview:doneButton];
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
// Hide previous pages tool bar
[[_thisController navigationController] setToolbarHidden:YES animated:NO];
- (IBAction)clearButtonTapped:(id)sender
NSLog(@"CLEAR BUTTON TAPPED");
- (IBAction)doneButtonTapped:(id)sender
NSLog(@"DONE BUTTON TAPPED");
这个UIToolBar
被添加到界面生成器中的每个UIViewController
。隐藏在 viewWillAppear 中的那个是从UIViewController
以编程方式添加的那个,它呈现了当前的UIViewController
。
问题:
与其将这段代码复制并粘贴到每个UIViewController
的类文件中,我如何将其放入文件中并在每个UIViewController
中使用该文件?
【问题讨论】:
【参考方案1】:您有多种选择。可能最简单的方法是定义一个定义共享属性和方法的 UIViewController 基类,然后使所有使用这些属性的视图控制器成为该类的子类。
另一种选择是定义一个定义新方法的 UIViewController 类别。但是,这不允许您向视图控制器添加新的属性或实例变量(至少不会变得棘手。)
【讨论】:
所以我要定义基类。然后将所有这些方法和工具栏属性添加到这个基类。然后只是将每个视图控制器的类更改为基本控制器的子类?如何调用基类的方法? @LondonGuy,这是非常基本的 OOP 内容。您可能想拿起一本关于面向对象编程的书并做一些阅读。否则,您将无谓地挣扎。 我同意。来自 ruby on rails 的这些东西应该会自动浮现在脑海中。不是我不知道该怎么做,而是我似乎忘记了objective-c有能力做这些事情。我往往会错过一些明显的解决方法。我想熟能生巧。自从去年底回来后,我花了一段时间才进入编程的轨道。应用程序越复杂,我需要做的事情就越多,我学到的东西就越多。所以下次我需要重用代码时,我可以采取这条路线或使用类别。我什至发现还有其他方法可以做到这一点,但这是最合适的。以上是关于如何在文件之间重用相同的代码并选择在objective-c中传递参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何调试,为啥 Spring Boot 集成测试上下文没有在测试之间重用?