我创建了一个自定义类AnimalView
,它是UIView
的子类,其中包含UILabel
和UIImageView
。
@interface AnimalView : UIView {
UILabel *nameLabel;
UIImageView *picture;
}
然后我在ViewController.view中添加了几个
AnimalView
。在touchesBegan:withEvent:
方法中,我想检测被触摸的对象是否为AnimalView
。这是viewController的代码:@implementation AppViewController
- (void)viewDidLoad {
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:...
[self.view addSubview scrollview];
for (int i = 0; i<10; i++) {
AnimalView *newAnimal = [[AnimalView alloc] init];
// customization of newAnimal
[scrollview addSubview:newAnimal;
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
UIView *hitView = touch.view;
if ([hitView isKindOfClass:[AnimalView class]]) {
AnimalView *animal = (AnimalView *)hitView;
[animal doSomething];
}
}
但是,当我单击该动物时,什么也没有发生。当我通过
hitView
检查NSLog(@"%@", [hitView class])
的类时,它始终显示UIView
而不是AnimalView
。将AnimalView添加到ViewController时,将其改为UIView是真的吗?有什么方法可以找回自定义类的原始类? 最佳答案
AnimalView中是否包含UIView子视图?他们可能是拿起触摸事件的人。您可以通过反转David在AnimalView的所有子视图上描述的方法来禁用这些视图的用户交互。
关于iphone - 为什么我无法通过isKindOfClass获得自定义类的正确类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2441070/