我创建了一个自定义类AnimalView,它是UIView的子类,其中包含UILabelUIImageView

@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/

10-10 21:11