UITableViewCell IBAction无法在iOS 7中运行

时间:2014-12-22 06:58:00

标签: ios iphone uitableview swift ios7

我面临的是我在Swift中开发的代码。它有一些自定义单元格和UIButton。按钮是IBOutlet连接,其各自的单元格中具有属性,对它们的操作绑定在相同的类中。现在的问题是它在iOS 8中运行得很完美。但是每当我触摸按钮时,我都不知道iOS 7有什么问题,完整的单元格被点击并且Tableview的{{1} } 叫做。我到目前为止所做的是

  • 检查didSelectRowAtIndexPath:以查看父视图和单元格并更改其值
  • 删除按钮并在不同论坛上重新添加,但没有运气
  • 检查了Tableview的委托方法.userInteractionEablednumberOfSectionsnumberOfRowsInsection:,并将其返回类型更改为在stackoverflow针对问题上找到的NSInteger和CGFloat。

到目前为止,还有其他人遇到过这个问题并找到了解决方案吗?

修改

  • 在将值设置为单元格后,通过重置UIButton的目标操作来检查。没有运气

4 个答案:

答案 0 :(得分:1)

我已经测试了你的问题。它对我来说运行良好。请参阅下面的代码。

在TestTableViewController.swift

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as CustomCell

       // Configure the cell...

        cell.testButton.addTarget(cell, action: "testButtonClicked", forControlEvents: UIControlEvents.TouchUpInside)

       return cell

    }

       override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        NSLog("didSelectRowAtIndexPath called")

    }

在CustomCell.swift

class CustomCell: UITableViewCell {

    @IBOutlet var testButton: UIButton!

    override func awakeFromNib() {

        super.awakeFromNib()

        // Initialization code

    }

    override func setSelected(selected: Bool, animated: Bool) {

        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state

    }

    func testButtonClicked() {

        NSLog("Button Clicked")

    }

}

当我点击按钮时,它会记录"按钮点击"当点击单元格时,它会记录" didSelectRowAtIndexPath调用"。你可能在reset()函数或倒数第二个函数中做错了。

答案 1 :(得分:0)

我在我的应用程序中完成了以下代码,它运行正常。

请勿尝试在自定义tableview单元格上进行编码。

您可以在viewcontroller中获取该单元格的值。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row==0)
    {
        static NSString *simpleprice = @"Price";

        price = (PriceCell *)[tableView dequeueReusableCellWithIdentifier:simpleprice];

        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PriceCell" owner:self options:nil];

        price = [nib objectAtIndex:0];
        [price.btnPrice addTarget:self action:@selector(buyPressed) forControlEvents:UIControlEventTouchUpInside];
    }
    return price;

 }

希望这会对你有所帮助。这适用于ios7和ios8。

...谢谢

答案 2 :(得分:0)

经过长时间挖掘后我遇到了这样的问题,我找到了根本原因并且它在 Cell XIB

我之前所做的事情:

i)首先我添加了CustomCell .h.m ii)之后我通过新文件选项添加了 XIB ,你注意到了,    有像“查看”这样的选项,我已选择并添加到捆绑包中。用我的CustomCell.h绑定它。

解决方案:

i)按新文件选项添加 XIB ,在用户界面中选择查看。 ii)在XIB中,您可以在左侧面板中看到视图。删除该视图。 iii)从User Interface面板拖放UITableViewCell。完成此步骤后, XIB 会出现类似下图所示的内容。

enter image description here

答案 3 :(得分:0)

更改您的cell.button Action target to self,并将您的按钮操作方法复制到UITableView可用的viewController类(.mm)文件中。