我需要从ViewController
引用UITableViewCell
以显示外部类UIAlertController
。
我如何找到该参考?
答案 0 :(得分:1)
你可以尝试
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:true completion:nil];
答案 1 :(得分:1)
走上响应者链,直到你来到视图控制器。一旦你拥有作为视图控制器的响应者,将其转发到视图控制器类并从那里开始。
UIResponder* r = myTableViewCell;
while (![r isKindOfClass: [UIViewController class]])
r = [r nextResponder];
[(UIViewController*)r presentViewController:myAlert animated:YES completion:nil];
答案 2 :(得分:1)
您可以使用响应程序链从UIViewController
获取UITableViewCell
的实例。
响应者链:
响应者链是一系列链接的响应者对象。它从第一个响应者开始,以app对象结束。如果第一响应者无法处理事件,则它将事件转发给响应者链中的下一个响应者。响应者对象是一个可以响应和处理事件的对象。
我认为以下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];
}
Swift版本:
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)
}