【问题标题】:Get instance of class from `UIView`从 `UIView` 获取类的实例
【发布时间】:2014-06-16 08:20:17
【问题描述】:

我正在尝试访问包含我的UIView 的实例变量。

更准确地说,我有一个自定义的UITableViewCell。在里面我有一个UIView,我想通过我的UIView 访问这个单元格。 基本上我将这个UIView 作为另一个函数的参数传递给其他地方。

有没有可能通过这个UIView 访问我的手机,还是我必须找到其他方法?

感谢您的帮助。

【问题讨论】:

    标签: ios objective-c uitableview uiview instance


    【解决方案1】:

    UIView 将是该UITableViewCell 的子视图。 UIView 有一个属性superview,它可能是UITableViewCell,基于您建立的任何视图层次结构。也可以获取superview的view。

    UITableViewCell* parentCell = (UITableViewCell*)myView.superview;

    = (UITableViewCell*)myView.superview.superview;

    【讨论】:

    • 我以为superview这个方法只能访问UIView。这就是为什么我直接停止以这种方式搜索的原因。我忘了UITableViewCell 仍然是一个视图......
    • 是的,所有的 UI 都是 UIView。
    【解决方案2】:

    我不知道为什么要这样做,我认为这有点难看。但是你可以试试这个类别:

    @interface UITableView (MyCoolExtension) 
    
    - (NSIndexPath *)indexPathForCellContainingView:(UIView *)view;
    
    @end
    
    @implementation UITableView (MyCoolExtension)
    
    - (NSIndexPath *)indexPathForCellContainingView:(UIView *)view {
        while (view != nil) {
            if ([view isKindOfClass:[UITableViewCell class]]) {
                return [self indexPathForCell:(UITableViewCell *)view];
            } else {
                view = [view superview];
            }
        }
    
        return nil;
    }
    
    @end
    

    我回答了here

    【讨论】:

    • 基本上我有一个带有微调器的UITableViewCell。下载图片时有一个微调器,否则没有。当我尝试访问此图片时(即使它存储在本地),我会启动微调器。我创建了自己的缓存类,这个类负责停止微调器。在参数中我有一个UIView。我想我会尝试将这个UIView 添加为微调器的子视图,而不是将它放在超级视图上。你觉得有可能吗?
    • @bobbystouket,据我了解,您的单元格中有UITableViewUIImageViews。你在下载图像时显示activityView。您可以使用activityView 初始化您的单元格,并从您的缓存类回调到您的单元格以删除activityView 并设置图像。
    • 这正是我想做的,但我目前在我的缓存类上使用SDWebImage。我不知道如何从中创建这样的回调。
    • 我的单元格允许用户全屏显示图片。但是全屏变量在我的主控制器上。这意味着我的单元管理我的控制器的UIView。当我放置全屏按钮时,会在当前单元格上调用该方法。即使我的单元开始此操作,我也可以将委托转移到我的主控制器吗?
    • @bobbystouket,当然可以!您需要在自定义单元类中创建委托。从自定义单元格中的某些操作调用委托的方法。并在主控制器中实现delegate的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多