我正在尝试使用CollapseClick
表格控件。这一切都有效,但我似乎无法向表格单元格展开时显示的视图添加按钮事件。
查看代码时,它是UITableView
,它创建UITableViewCell
并动态添加UIView
。我认为这里添加了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
答案 0 :(得分:1)
在查看代码时,在使用视图时,您会有一些忽视。
了解视图最重要的一点是,为了让点击事件在子视图上注册,父视图不能更小。这里的愚蠢之处在于,即使您可以直观地看到注入ContentView的视图,内容视图的宽度也会设置为零,这意味着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;
解决了这两个问题后,您的代码就可以运行了。如果你想看到它,我可以在代码中加入我想要的内容吗?
答案 1 :(得分: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:
方法的矩形并未全部使用
向单元格添加按钮不是最合适的事情(整个单元格应该是按钮)。但是,如果您绝对需要,请尝试将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;