iOS:针对不同标签 ID 的按钮操作,避免切换大小写程序



我正在开发一个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? 
}

相关内容