ios - 如何为 UITableViewCell 找到 ViewController?

标签 ios objective-c

我需要从 UITableViewCell 引用 ViewController 以显示来自外部类的 UIAlertController

我怎样才能找到那个引用?

最佳答案

您可以使用响应链从 UITableViewCell 获取 UIViewController 的实例。
响应链:
响应者链是一系列链接的响应者对象。它以第一响应者开始,以应用程序对象结束。如果第一响应者无法处理事件,它将把事件转发给响应者链中的下一个响应者。响应者对象是可以响应和处理事件的对象。

我认为下面的 UITableViewCell 扩展可能对您有所帮助。
Objective-C 版本:
UITableViewCell+ParentViewController.h

@interface UITableViewCell (ParentViewController)
-(UIViewController *)parentViewController;
@end

UITableViewCell+ParentViewController.m

@implementation UITableViewCell (ParentViewController)

-(UIViewController *)parentViewController{
    UIResponder *parentResponder = nil;
    while (parentResponder != nil) {
        parentResponder = parentResponder.nextResponder;
        if ([parentResponder isKindOfClass:[UITableViewCell class]]) {
            UIViewController *parentViewController = (UIViewController *)parentResponder;
            return parentViewController;
        }
    }
    return nil;
}

@end

您可以在 UITableViewCell 对象中调用以下代码。

 #import "UIView+ParentViewController.h"

 ViewController *parentViewController = cell.parentViewController;
 if (parentViewController){
     [parentViewController:objAlert animated:YES completion:nil];
 }


快速版本:

extension UITableViewCell {
    var parentViewController: UIViewController? {
        var parentResponder: UIResponder? = self
        while parentResponder != nil {
            parentResponder = parentResponder!.next
            if let viewController = parentResponder as? UIViewController {
                return viewController
            }
        }
        return nil
    }
}

您可以在 UITableViewCell 对象中调用以下代码。

 if let parentViewController = cell.parentViewController as? ViewController {
    self.present(objAlert, animated: true, completion: nil)
}

关于ios - 如何为 UITableViewCell 找到 ViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334157/

相关文章:

iphone - iOS 默认文档文件

ios - 自定义 tableviewcell 中的文本字段在滚动时超出单元格

objective-c - Cocoa应用程序系统重启

ios - 以编程方式在 PDF 文件上书写

ios - CMake:如何将目录复制到 ios 应用程序包中

ios - 将 JSON 数据存储到 Swift 4 中的模型类数组中

objective-c - 为 AFNetworking 的 UIImageView 类别预缓存图像

ios - 如何在 iOS 中对谷歌地图执行聚类

ios定期获取我的位置并设置按钮以获取我的位置 - 谷歌地图不起作用

objective-c - AFHTTPClient - 解析响应对象