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在其他情况下工作的方法.那么我该如何解决这种情况呢?
解决方案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)
| 归档时间: |
|
| 查看次数: |
1271 次 |
| 最近记录: |