我正在开发一个iOS应用程序屏幕,其中大约有25个按钮,单击每个按钮将启动一个单独的视图控制器。基本上,我已经实现了一个"IBAction",并为每个按钮提供"标签ID"。在此按钮操作下,基于按钮标签 ID,我正在启动每个视图控制器。这里的问题是,我正在通过switch case
进行编程以识别此按钮 ID,但我想避免使用此开关大小写并希望在此处提供更有效的编程。如何删除"开关大小写",但为这种情况提供更好的编程方法。
在这里,switch
陈述似乎是最干净,最有效的做事方式,你可能会有很大的if-elseif
但如果你对switch
冷淡,那么我想这对你来说就更不是一个选择。
如果你真的想避免开关,那么你能做的是将你的按钮从0标记到24,并有一个包含视图控制器类名称数组的NSArray
,然后使用NSClassFromString
获取类引用,从中实例化该类的对象。
然后你可以做这样的事情:
- (id)init{
self = [super init];
if(self){
self.classesArray = @[@"MyControllerOne", @"MyControllerTwo", @"MyControllerThree"];
}
return self;
}
[...]
- (IBAction)tappedButton:(UIButton *)sender{
NSString *viewControllerClassString = [self.classesArray objectAtIndex:sender.tag];
id viewController = [[NSClassFromString(viewControllerClassString) alloc] init];
// Present it modally? Push it onto the stack?
}