繁体   English   中英

iphone - 从uitableviewcell访问uitableviewcontroller

[英]iphone - access uitableviewcontroller from uitableviewcell

我有这样的结构....

UITableViewController -> UITableViewCell -> UIView

我需要UIView来访问UITableViewController的HashTable( NSMutableDictionary

有没有办法只从ViewCell访问ViewController(使用[ViewCell superview]显然不起作用)....我是否需要使用[[UIApplication sharedApplication] delegate]通过AppDelegate?

谢谢!

这应该做的伎俩:

UITableView *tv = (UITableView *) self.superview.superview;
UITableViewController *vc = (UITableViewController *) tv.dataSource;

您可以为此创建一个类别:

@implementation UITableViewCell (FindTableViewController)

- (id<UITableViewDataSource>)tableViewController
{
    UIView *view = self;
    while (!(view == nil || [view isKindOfClass:[UITableView class]])) {
        view = view.superview;
    }

    return ((UITableView *)view).dataSource;
}

@end

然后你可以从单元格本身简单地访问self.tableViewController (假设你已经包含了这个类别)。 您可能需要将其强制转换为表视图控制器的类。

如果我需要的话,我通常会从我的UIView到我的UIViewController维护一个弱引用,通常是通过创建这样的方法:

-(MyView*)initWithController:(CardCreatorViewController*) aController andFrame:(CGRect)aFrame
{
    if (self = [super initWithFrame:aFrame]) 
    {
       controller = aController;
       // more initialisation here
    }

    return self;
}

如果您想要更加分离的解决方案,也可以使用委托模式。 我倾向于认为这对视图及其控制器来说太过分了,但我会将它用于控制器和子控制器系统。

Kare Morstol的一些修改回答:

tableviewcell的层次结构在iOS 5.0中(我的测试版)

cell.superview = tableview  
cell.superview.superview = UIViewControllerWrapperView  

因此,使用cell.superview获取tableview。 tableview和tableviewController默认具有delegate,dataSource的关系。
您可以通过tableview.delegatetableview.dataSource获取tableviewController引用。

UITableView *tableView = cell.superview;  
UITableViewController *tableViewController = tableView.delegate; // or tableView.dataSource`

由于UITableViewCell位于视图层次结构中的某个位置,因此您可以通过检索view.superview来访问根视图,直到获得它为止。 如果您不想在视图中添加任何属性,可以通过视图的nextResponder属性访问其控制器。 当然,您必须将它投射到您需要的任何类别,并且它可能不是该属性最干净的用途。 这是一个快速肮脏的黑客入手。

如果您正在寻找可以向您的孩子展示的东西,我的目标是通过您的app委托,或者如果您的视图控制器恰好是单身,只需实现单例设计模式并通过它访问它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM