0

したがって、標準の UIView のサブクラスである一連の MyCustomViews が取り込まれた UIScrollView があります。デリゲート コールバック「scrollViewDidScroll」で、すべてのサブビューをループして特定の関数を呼び出そうとしていますが、型キャストが機能しているとは思いません。以下に私のコードを示します。

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

    for(UIView *subView in [scrollView subviews){

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

customView で「myMethod」を呼び出すと、認識されないセレクターがインスタンスに送信されたと言ってプログラムがクラッシュします。メソッド myMethod は他の状況でも機能するため、型キャストが問題だと思います。では、この状況を改善するにはどうすればよいでしょうか。

4

2 に答える 2

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];
}
于 2013-11-07T23:48:59.873 に答える