UIButton 在 UItableViewCell 内不起作用

Posted

技术标签:

【中文标题】UIButton 在 UItableViewCell 内不起作用【英文标题】:UIButton Not Working inside UItableViewCell 【发布时间】:2011-07-12 18:16:18 【问题描述】:

我有一个由标签和两个按钮组成的视图,我将其命名为UIView *footerView,因为我在表格视图的最后一部分中实现了它。我通过使用[cell.contentView addSubview: footerView] 使这个视图成为indexPath.section = 3 的视图

这是我的问题:

我可以看到单元格内的视图。但我无法点击按钮,因为选择的是单元格而不是按钮(位于单元格内)。

我该如何解决这个问题? 我的按钮甚至无法选择!

这是代码...在cellForRowAtIndexPath:

if (section == 3)

    cell = nil;
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    if (indexPath.row ==0)

        cell.contentMode = UIViewContentModeScaleToFill;
        [cell.contentView addSubview:self.footerView];

    


以及页脚视图(以防有人需要查看):

 UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 3, 300, 44)];
textView.text = @"Terms and Conditions: Lorem ipsum dolor sit amet, con- sectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut";

textView.backgroundColor = [UIColor clearColor];
textView.font = [UIFont systemFontOfSize:10];

[self.footerView addSubview:textView];

//create the button
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button setFrame:CGRectMake(0, 60, 300, 44)];

//set title, font size and font color
[button setTitle:@"Create Account" forState:UIControlStateNormal];
[button.titleLabel setFont:[UIFont boldSystemFontOfSize:18]];
// [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

//set action of the button
[button addTarget:self action:@selector(createAccount:)
 forControlEvents:UIControlEventTouchUpInside];

[button setEnabled:YES];
//add the button to the view
[self.footerView addSubview:button];


UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[cancelButton setFrame:CGRectMake(0, 107, 300, 44)];

//set title, font size and font color
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelButton.titleLabel setFont:[UIFont boldSystemFontOfSize:18]];
// [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

//set action of the button
[cancelButton addTarget:self action:@selector(cancelPressed:)
       forControlEvents:UIControlEventTouchUpInside];


[cancelButton setEnabled:YES];
//add the button to the view
[self.footerView addSubview:cancelButton];

【问题讨论】:

【参考方案1】:

你需要实现类似的东西

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

    if (3 == indexPath.section)
      return nil;
    
    return indexPath;

好的,如果我实现上述内容,它就可以正常工作。我相信我可以通过使UIButton 框架落在单元格的contentView 之外来重现您的问题。确保单元格足够大以容纳您的标签,并且它应该可以正常工作。要使单元格更大以适合您的内容,您可能必须实现:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

  return aHeightThatIsBigEnoughToContainMySubViews;

【讨论】:

@paul:我也已经解决了身高问题。它比我对该部分的子视图大。问题仍未解决。 footerView 的框架设置为? FML。谢啦。其实我用过... self.footerView = [[UIView alloc] init.. 把它改成... self.footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 150)]; 成功了。 @Paul 和@Deepak:我现在将发布一个新问题,这是我面临的一个非常严重的问题,与这个问题有关。如果可能,请帮助我!我将在接下来的 10 分钟内发布。 如果你没有使用ARC并且你合成了你的footerview属性会导致内存泄漏。

以上是关于UIButton 在 UItableViewCell 内不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIButton 的右边缘对齐 UIButton 图像

想要在单击相同的 UIButton 时从 UITableViewCell 更改正确的 UIButton 图像

表格单元格字幕不显示

点击 UIButton 以编程方式创建另一个 UIButton

在 iOS 中的 UIButton 上方创建叠加层?

如何在按下其他 UIButton 时触发 UIButton 的“按下效果”或“突出显示效果”