我需要从 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/