Button Click上的UITableView CustomCell崩溃

时间:2013-07-31 04:33:19

标签: iphone objective-c uitableview custom-cell

这是非常常见的问题,虽然我有谷歌和交叉检查我的代码几次但我无法弄清楚崩溃

*** -[MyCustomCell performSelector:withObject:withObject:]: message sent to deallocated instance 0x96f6980

我有一个名为MyCustomCell的CustomCell与XIB,我有3个按钮用于Facebook,Twitter,LinkedIn。我在CustomCell类中给了他们所有的IBAction。

当我点击其中任何一个时,我都会遇到这种情况。

我正在使用ARC。

在我的ViewController类中,我有cellForRowAtIndexPath

{
        static NSString *CellIdentifier = @"MyCustomCell";
        MyCustomCell *cell = (MyCustomCell*)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
            cell = (MyCustomCell *)[nib objectAtIndex:1];
        }
        return cell;
}


MyCustomCell.m

- (IBAction)facebookPressed:(BaseButton *)sender {

}
- (IBAction)twitterPressed:(BaseButton *)sender {

}
- (IBAction)linkedInPressed:(BaseButton *)sender {

}

3 个答案:

答案 0 :(得分:1)

我今天犯了这个错误! :)你要做的就是更换2行

NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NameOfCustomCellNibFile" owner:self options:nil];
cell = [nib objectAtIndex:1]; 

您必须使用.xib文件的名称加载loadNibNamed :.我还认为它与标识符有关,但这是关于引用到单元格而不是单元格的nib的名称。

希望这有帮助!

答案 1 :(得分:1)

  1. 您必须保持单元格的类名称和XIB名称相同。
  2. 一般保持所有者零。
  3. 此外,如果只有一个视图(例如,在您的情况下为1 UITableViewCell),则此视图在索引0而不是索引1处可用。
  4. 在XIB文件中,确保将按钮链接到视图本身,即IBOutlet或IBAction。
  5. 链接按钮必须已添加到视图中,而不是在XIB中浮动。否则,它们将实例化并进入加载数组的其他索引。如果你一段时间不想要某个按钮,那就把它隐藏吧。
  6. 所以代码如下:

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

    进一步确保您执行以下操作来创建XIB

    好的,接下来是另一部分简单的过程:

    1. 创建一个派生自UITableViewCell类的MyCustomCell类。
    2. 创建一个与MyCustomCell.xib同名的单独.xib文件。
    3. 打开.xib并删除其中的现有视图。拖放新的 来自编辑对象的UITableViewCell。
    4. 查看图像,将XIB中UITableViewCell的类名更改为您的类名。 enter image description here
    5. 现在objectAtIndex 0将返回MyCustomCell。
    6. 在您的XIB的UITableViewCell中添加所有按钮和其他视图。

答案 2 :(得分:1)

您也可以像这样编写自定义单元格。在自定义单元格的笔尖处拖动一个UIButton并在Xib中设置它的标签。然后使用波纹管方法: -

UIButton *btnMulSelected;
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *CellIdentifier =[NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row];
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil)
        {
            [[NSBundle mainBundle]loadNibNamed:@"cell_custome_iphones" owner:self options:nil];
            cell = self.tblCell;
            self.tblCell = nil;

            btnMulSelected =(UIButton*)[cell.contentView viewWithTag:2];

            [btnMulSelected addTarget:self action:@selector(MyButtonAction:) forControlEvents:UIControlEventTouchUpInside];


        }
        return cell;
    }

不要从Nib连接IBAction。只需连接Custom-cell IBOutlate或从nib中输入Unique UIButton标签。