将UIViews转换为自定义视图

时间:2013-11-07 23:44:20

标签: ios objective-c uiview casting

所以我有一个UIScrollView,其中填充了一系列MyCustomViews,它们是标准UIView的子类。在委托回调“scrollViewDidScroll我试图循环遍历所有子视图并调用它们上的特定函数,但我不认为类型转换是有效的。这是我的代码如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{

    for(UIView *subView in [scrollView subviews){

        MyCustomView *customView = (MyCustomView *)subView;
        [customView myMethod];
    }
}

当我在customView上调用“myMethod”时,程序崩溃说一个无法识别的选择器被发送到实例。我相信我的类型转换是myMethod在其他情况下工作的方法。那么我该如何解决这种情况呢?

2 个答案:

答案 0 :(得分:5)

解决方案1:

如果您执行以下操作,则甚至无需将对象强制转换为MyCustomView *。它可以是任何类型,例如的UIView。

if([subView respondsToSelector:@selector(myMethod)]) {
    [subView performSelector:@selector(myMethod)];
}

解决方案2:

您可以在进行演员表之前检查对象类型。

if([subView isKindOfClass:[MyCustomView class]]) {
    MyCustomView *customView = (MyCustomView *)subView;
    [customView myMethod];
}

答案 1 :(得分:0)

要“抓住”此问题,请使用

if([customView respondsToSelector:@selector(myMethod)]){
    [customView myMethod];
}

并且这样,应用程序不会崩溃。

同样在您的使用中for(MyCustomView* customView in [scrollView subviews]){