有没有办法使用 - (UIView *)viewWithTag:(NSInteger)标签与自定义UIView

时间:2010-08-14 19:02:10

标签: objective-c uiview

我有一个继承自UIView的课程

然而,在尝试使用follow (UIView *)viewWithTag:(NSInteger)tag时,我收到警告:*不兼容的Objective-C类型初始化'struct UIView *',期望'struct CustomView '

现在我已经创建了一个返回我的自定义视图的自定义方法,该方法使用带有view.subviews的for循环,因为我要查找的视图来自同一个superview。如果标签与我正在搜索的标签匹配,我会进行条件检查,然后返回视图。

我想我只是想知道这是否有更好的做法?

由于

1 个答案:

答案 0 :(得分:8)

你可能在做:

CustomView * aView = [someView viewWithTag:42];

viewWithTag:会返回UIView,而非CustomView。有几种方法可以解决这个问题:

  1. 铸造。如果您完全确定通过这样做只会获得CustomView,那么您可以这样做:

    CustomView * aView = (CustomView *)[someView viewWithTag:42];
  2. 反射。如果您不确定是否要获得自定义视图,请将其分配到UView引用中,稍后再决定如何处理它:

    UIView * aView = [someView viewWithTag:42];
    if ([aView isKindOfClass:[CustomView class]]) {
      CustomView * customView = (CustomView *)aView;
    }