我知道当隐藏单元格时,indexPath将返回nil,但我的问题是为什么它不可见?
我的情况是: 单击按钮时单元格中有一个按钮,它尝试获取indexPath(通过选择器indexPathForCell:)
同时桌面视图由另一个线程刷新。
有时indexPath会得到nil,我的问题是因为按钮在单元格中,当事件被触发时单元格必须存在(否则应该如何点击按钮),是什么导致单元格被隐藏?
THX。
Hito
而且,tableview有时会重新加载
答案 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
}
或者您也可以在此视频教程链接上查看
答案 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]];
}