将UIViews转换为自定义视图

use*_*952 0 casting objective-c uiview ios

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

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

    for(UIView *subView in [scrollView subviews){

        MyCustomView *customView = (MyCustomView *)subView;
        [customView myMethod];
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mac*_*tle 5

解决方案1:

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

if([subView respondsToSelector:@selector(myMethod)]) {
    [subView performSelector:@selector(myMethod)];
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:

您可以在执行转换之前检查对象类型.

if([subView isKindOfClass:[MyCustomView class]]) {
    MyCustomView *customView = (MyCustomView *)subView;
    [customView myMethod];
}
Run Code Online (Sandbox Code Playgroud)