0

我正在尝试使用CollapseClick表格控件。这一切都有效,但我似乎无法将按钮事件添加到展开表格单元格时显示的视图中。

翻看代码,是动态UITableView创建UITableViewCells和添加UIViews的。我认为UIView这里添加了:

+ (CollapseClickCell *)newCollapseClickCellWithTitle:(NSString *)title index:(int)index    content:(UIView *)content {
    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil];
    CollapseClickCell *cell = [[CollapseClickCell alloc] initWithFrame:CGRectMake(0, 0, 320, kCCHeaderHeight)];
    cell = [views objectAtIndex:0];

    // Initialization Here
    cell.TitleLabel.text = title;
    cell.index = index;
    cell.TitleButton.tag = index;
    cell.ContentView.frame = CGRectMake(cell.ContentView.frame.origin.x, cell.ContentView.frame.origin.y, cell.ContentView.frame.size.width,  content.frame.size.height);
    [cell.ContentView addSubview:content];

    return cell;
}

该按钮会显示,但如果我尝试连接任何事件,我将无法捕获它们。

这可能很简单。我已将应用程序放在这里:http ://www.havoc-media.com/TravelApp.zip

4

2 回答 2

1

在查看您的代码时,在使用视图时,您有一些疏忽。

关于视图最重要的一点是,为了在子视图上注册点击事件,父视图不能更小。这里愚蠢的是,即使您可以直观地看到注入到 ContentView 中的视图,但 Content 视图的宽度设置为零,这意味着 ContentView 内的所有视图都可以显示,但不会响应点击事件和单击事件将默认为 ContentView 的父视图,从而使您的按钮无法使用且无响应。

要在您的 openCollapseClickCellAtIndex 中解决此问题,您需要添加代码:

cell.ContentView.frame = CGRectMake(cell.ContentView.frame.origin.x, cell.ContentView.frame.origin.y, 320, cell.ContentView.frame.size.height); 

您的第二个问题是您创建的 CollapseClickCell xib 没有与视图控制器通信。这意味着您在视图控制器中创建并注入 CollapseClickCell xib 的视图,您希望将其报告回视图控制器......不是。

有一种方法可以解决这个问题,但我认为我会创建另一个自定义 xib-A 来注入您的 CollapseClickCell,并让 xib-A 处理您的按钮单击事件而不是 test1View。创建一个名为“testView”的 xib 链接到一个测试类并将此代码放入

-(UIView *)viewForCollapseClickContentViewAtIndex:(int)index
 {
  NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"testView" owner:nil options:nil];

  UIView *content = [views objectAtIndex:0];

  switch (index) {
    case 0:
      return content; /*test1View;*/
      break;

一旦解决了这两个问题,您的代码就可以工作。如果您想查看,我可以包括我对您的代码所做的添加以使其正常工作吗?

于 2013-04-29T00:55:57.803 回答
0

首先,这段代码是不正确的:

NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil];
CollapseClickCell *cell = [[CollapseClickCell alloc] initWithFrame:CGRectMake(0, 0, 320, kCCHeaderHeight)];
cell = [views objectAtIndex:0];

您首先通过创建一个单元格[collapseClickCell alloc]。但在那之后,您将创建的数组的第一个对象分配给loadNibNamed:owner:options:nil同一个变量。您要么从笔尖加载单元格,要么以编程方式创建它。简而言之,您应该只使用:

NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"CollapseClickCell" owner:nil options:nil];
CollapseClickCell *cell = [views objectAtIndex:0];

请注意,您提供给该initWithFrame:方法的 rect 根本没有被使用

向单元格添加按钮不是最合适的事情(整个单元格应该是按钮)。但是,如果您绝对需要,请尝试将 uibutton 指定为单元格的附属视图。看看http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/accessoryView

类似于:

UITableViewCell *cell = (obtain your cell)
UIButton *button= [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(buttonTapped) forControlEvents:UIControlEventTouchUpInside];
button.frame = CGRectMake(x,y,width,height);
cell.accessoryView = button;
于 2013-04-30T16:03:06.097 回答