如何通过代码更改视图的自定义类

时间:2013-12-01 12:53:41

标签: uiview uiswipegesturerecognizer

当我在视图上执行滑动时,如何为同一视图设置类? 我已经为我想要更改的类导入了头文件,例如#import "Circuit1.h"

- (IBAction)userSwiped:(UISwipeGestureRecognizer *)sender {
    [self numberOfSwips];

    self.numberOfSwips+=1;
    if (self.numberOfSwips>3){
        self.numberOfSwips=3;
    }
    if (self.numberOfSwips ==1) {
        self.myView.class =super.Circuit1;}
    else if (self.numberOfSwips ==2){
        self.myView.class =super.Circuit2;}
    else if (self.numberOfSwips ==3){
     self.myView.class =super.Circuit3;
    }
    NSLog(@"%f",self.numberOfSwips);
}

它给了我self.myView.class = super.Circuit1和另外2

的错误

1 个答案:

答案 0 :(得分:0)

在运行时更改Objective-C对象的类在技术上是可行的,但是错误的想法。有关原因的详细解释,请参阅Objective-C: How to change the class of an object at runtime?

但是,可以声明类型为Class的变量,并使用其中存储的值来实例化对象:

Class customClass = [Circuit1 class];

然后是这样的:

[myView removeFromSuperview]; 
myView = [customClass alloc]initWithFrame:frame];
[containerView addSubView:myView]; 

但这会涉及每次用户刷新时重新创建视图。我不知道你的代码到底是什么,但如果视图很复杂,这几乎肯定是错误的方法。如果你只有3个子视图,也许最好根据需要创建它们,将它们存储在viewController中的实例变量数组中,并在用户滑动时将它们交换进出视图层次结构