【问题标题】:call selector in parent from UITableView delegate class从 UITableView 委托类调用父级中的选择器
【发布时间】:2012-04-08 04:41:00
【问题描述】:

好的,我已经研究了几个小时了,我想是时候联系了。我第一次在一个故事板上使用多个 tableviews (2)。我使用自己的视图控制器(主视图控制器)设置故事板。我委托给主视图控制器的第一个表作为通用模式。对于第二个表视图,我设置了一个单独的类作为委托,并委托给表视图和数据源。

看起来不错,每个 tableview 加载并显示正确的数据等。到目前为止一切都很好。

这是第二个 tableview 的问题 - 外部委托的一个,我想在通过以下方式选择一行时采取行动: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath blah ,等等,等等。

所需的操作是启动到连接到“主视图控制器”的新视图控制器的转场。我在主视图控制器中有一个选择器,它具有执行 segue 操作(否则有效)

我不知道如何建立从代理到主视图控制器的连接,因此我可以调用正确的选择器,然后启动 segue。通常在segues之间我使用segue.parent..segue.destination....等。它们在这种情况下不起作用。我无法从委托类中转义,因为转义未连接到委托。

我已经尝试过这种方法,但它不起作用: 启动视图控制器:

VisitListDelegate = [[VisitsMainPageDelegate alloc] init];
[self.iboVisitsTableView  setDelegate:self.VisitListDelegate];
[self.iboVisitsTableView  setDataSource:self.VisitListDelegate];

LocalVisits *LV = [[LocalVisits alloc] init]; //datasource
VisitListDelegate.visits = [LV getLocalVisits]; //sets variable in delagate

名为 VisitsMainPageDelegate 的委托类

#import <UIKit/UIKit.h>
@class StartViewController;

@interface VisitsMainPageDelegate : UIViewController
    <UITableViewDelegate,UITableViewDataSource>  {

StartViewController *sourceParent;

}
@property (nonatomic,retain) StartViewController *sourceParent;
@property (nonatomic,strong) NSMutableArray *visits;
@end

然后尝试像这样引用它:

[sourceParent jumpToVistDetailsForThisVisit:@"test"];

我没有收到错误,但它不起作用。

任何有助于解决此问题的帮助将不胜感激。

谢谢!

【问题讨论】:

  • 你给sourceParent赋值了吗?即视图控制器中的delegate.sourceParent = self;
  • 不确定你的意思。我有一个带有 2 个表视图的主视图控制器。然后我创建了一个名为 VisitsMainPageDelegate 的类,在主视图控制器中我这样引用它: VisitListDelegate = [[VisitsMainPageDelegate alloc] init]; [self.iboVisitsTableView setDelegate:self.VisitListDelegate]; [self.iboVisitsTableView setDataSource:self.VisitListDelegate]; LocalVisits *LV = [[LocalVisits alloc] init]; //数据源 VisitListDelegate.visits = [LV getLocalVisits];我不知道如何从委托类返回到视图控制器的引用。

标签: ios objective-c uitableview cocoa-touch delegates


【解决方案1】:

当你实例化委托类时,你需要给它一个 ViewController 的引用,如下所示:

[[VisitsMainPageDelegate alloc] init];
[self.iboVisitsTableView setDelegate:self.VisitListDelegate]; 
delegate.sourceParent = self;

您已经拥有的前两行 - 这是您需要添加的最后一行。

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多