tableView:indexPathForCell在单击单元格时返回nil

时间:2017-01-25 16:18:38

标签: ios objective-c iphone

我知道当隐藏单元格时,indexPath将返回nil,但我的问题是为什么它不可见?

我的情况是: 单击按钮时单元格中有一个按钮,它尝试获取indexPath(通过选择器indexPathForCell:)

同时桌面视图由另一个线程刷新。

有时indexPath会得到nil,我的问题是因为按钮在单元格中,当事件被触发时单元格必须存在(否则应该如何点击按钮),是什么导致单元格被隐藏?

THX。

Hito

而且,tableview有时会重新加载

3 个答案:

答案 0 :(得分:1)

您可能有错误的重用标识符,该标识符在故事板中的自定义单元格中定义。

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell : SingleLabelTableCell = tableView.dequeueReusableCellWithIdentifier("SingleLabelTableCell", forIndexPath: indexPath) as! SingleLabelTableCell
    let tempDict : NSDictionary = dataArray.objectAtIndex(indexPath.row) as! NSDictionary
    cell.nameLabel.text = tempDict.valueForKey("title") as? String
    return cell
}

或者您也可以在此视频教程链接上查看

https://www.youtube.com/watch?v=OHue6nFUBO8

答案 1 :(得分:1)

大家好,我终于得到了答案。

当按钮被触发并且tableview是" reloadData"在同一个runloop中," reloadData"导致单元格不可见,并且" indexPathForCell"将获得零。

如果不检查indexPath的值,则很危险。

答案 2 :(得分:0)

  

尝试使用以下格式

<强> Cell.h

//
//   Cell.h
//   Projects


#import <UIKit/UIKit.h>

@interface Cell : UITableViewCell


@property (weak, nonatomic) IBOutlet UIButton *btnCall;

@end

<强> Cell.m

//
//  Cell.m


#import "Cell.h"


@implementation NearByDealDetailCell

- (void)awakeFromNib {
    [super awakeFromNib];


}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

// ControllerVC.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

        static NSString *simpleTableIdentifier = @"Cell";
        Cell *cell = (Cell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"Cell" owner:self options:nil];
            cell = [nib objectAtIndex:0];
        }


               cell.btnCall.tag =  indexPath.row;
        [cell.btnCall addTarget:self action:@selector(actionBtnCall:) forControlEvents:UIControlEventTouchUpInside];

        return cell;

}



- (IBAction)actionBtnCall:(id)sender {

    UIButton *btn = (UIButton *)sender;
    NearByDealModel *activity = (NearByDealModel *)[self.activityList objectAtIndex:[btn tag]];

}