访问子视图委托方法

时间:2013-11-19 00:40:03

标签: ios objective-c

我的观点层次结构是下一个:

  1. 包含自定义视图的我的根视图控制器
  2. 我的自定义UIView包含自定义UITableView
  3. 我的自定义UITableView
  4. 我想使用自定义UITableView的委托方法,但我真的不知道如何访问它的委托,因为在我的自定义UIView类中添加了UITableView。 请让我知道,我对这个问题感到困惑。

    这是我的代码:

    将我的自定义UITableView添加到UIView(我正在使用CollapseClick):

    -(void) initMehod{
        DetailsView *testView = [[[NSBundle mainBundle] loadNibNamed:@"DetailsView"  owner:self    options:nil] lastObject];
    
        test1View = testView;
    
        //collapse click init
        CGRect viewRect = [test1View frame];
        viewRect.origin.x = 10;
        test1View.frame = viewRect;
    
        [test1View setBackgroundColor:[UIColor magentaColor]];
    
        self.myCollapseClick.CollapseClickDelegate = self;
        [self.myCollapseClick reloadCollapseClick];
    
        // If you want a cell open on load, run this method:
        [self.myCollapseClick openCollapseClickCellAtIndex:0 animated:NO];
    }
    ...
    

    我在我的根视图控制器中使用PagedFlowView来添加CustomView:

    - (UIView *)flowView:(PagedFlowView *)flowView cellForPageAtIndex:(NSInteger)index{
    
        mainDetailV = (MainDetailView *)[flowView dequeueReusableCell];
    
        if (!mainDetailV) {
            mainDetailV = [[[NSBundle mainBundle] loadNibNamed:@"MainDetailView"  owner:self    options:nil] lastObject];
            //mainDetailV.layer.cornerRadius = 6;
            mainDetailV.layer.masksToBounds = YES;
        }
    
        [usedViewControllers insertObject:mainDetailV atIndex:index];
    
        return mainDetailV;
    }
    

    一切都很完美,除了我不能使用我的自定义UITableView委托(例如didSelectRowAtIndexPath:方法)。

    编辑:我已解决了我的问题,PagedFlowView实际上处理了标记手势识别器并覆盖了我的自定义tableView委托方法。

    类似的问题:

1 个答案:

答案 0 :(得分:1)

首先,您的可折叠tableview抽象tableview委托(即它的包装器)。 它为您提供了一个方法didClickCollapseClickCellAtIndex。使用它。

似乎你在理解委托模式时遇到了一些问题。 避免破坏委托模式的级联效应。它使调试变得容易 并有助于理解代码的流程。下图可能会帮助您理解我的意思

Delegation pattern

在自定义视图中实现didSelectRowAtIndexPath而不是rootViewcontroller。

// This is your custom view
-(id)init{
     ----
    self.myCollapseClick.CollapseClickDelegate = self;
     ----

}

//collapsable delegate
-(void)didClickCollapseClickCellAtIndex:(int)index isNowOpen:(BOOL)open {
  // you need to create your own custom view delegate with mehthod didSelectIndex:index
   [self.customViewDelegate didSelectIndex:index];
}

在你的rootviewcontroller中你需要这样做

  

customView.customViewDelegate = self;

-(void)didSelectIndex:(int)index{
   // do your stuff here
}