-didSelectRowAtIndexPath:未在UITableView中调用

时间:2015-11-11 08:24:40

标签: ios objective-c uitableview didselectrowatindexpath

当我点击UITableViewCell时,它有选择效果(点击单元格中的灰色背景),但是didSelectRowAtIndexPath没有调用,会发生什么?

修改

这是我的代码

tableView.h文件

@interface PopCardView : MMPopupView <UITableViewDataSource, UITableViewDelegate>

@end

tableView.m文件

@property (nonatomic, strong) NSMutableArray *tagsArray;
@property (nonatomic, strong) UIView         *backView;
@property (nonatomic, strong) UITableView    *tableView;
@property (nonatomic, assign) NSUInteger     lastIndex;

@end

-(id)initWithTags:(NSMutableArray *)tags{
    self = [super init];

if (self) {
  self.backView = [[UIView alloc] init];
  self.backView.backgroundColor = [UIColor whiteColor];
  self.backView.layer.cornerRadius = 5;
  self.backView.layer.masksToBounds = YES;

  [self addSubview:self.backView];

  [self.backView mas_makeConstraints:^(MASConstraintMaker *make) {
      make.left.top.bottom.right.equalTo(self);
  }];

  _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 324, 300) style:UITableViewStylePlain];
  _tableView.tableFooterView =[[UIView alloc] init];
  [self.backView addSubview:_tableView];
  [_tableView mas_makeConstraints:^(MASConstraintMaker *make) {
     make.left.top.right.bottom.equalTo(self.backView).insets(UIEdgeInsetsMake(45,0, 45, 15));
     make.size.mas_equalTo(CGSizeMake(324, 200));
  }];

  [_tableView registerClass:[PopCardTagViewCell class] forCellReuseIdentifier:@"cell"];

  _tableView.allowsSelection = YES;
  _tableView.allowsSelectionDuringEditing = YES;
  [_tableView setUserInteractionEnabled:YES];


  _tableView.dataSource = self;
  _tableView.delegate = self;

  }
  return self;

}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [_tagsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        PopCardData *data = (PopCardData *)obj;
        data.selected = @"0";
        if (idx == indexPath.row) {
            data.selected = @"1";
        }
    }];
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.tableView reloadData];
    });
}




-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *identifer = @"cell";
    PopCardTagViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifer];
    if (!cell) {
        cell = [[PopCardTagViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifer];
    }
    [self configureCell:cell forIndexPath:indexPath];
    return cell;
}

-(void)configureCell:(PopCardTagViewCell *)cell forIndexPath:(NSIndexPath *)indexPath {
    PopCardData *data = (PopCardData *)[_tagsArray objectAtIndex:indexPath.row];
    //configure cell
    [cell setUserInteractionEnabled:YES];

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return _tagsArray.count;
}

EDIT2

这是我初始化的PopCardView代码,它使用swift

let pop = PopCardView(tags: self.m_model.getItmes())
pop.show()

3 个答案:

答案 0 :(得分:0)

您显示的代码不会将任何委托设置为表格视图。这是原因,或者您发布了不完整的代码段。

答案 1 :(得分:0)

self.tableView.delegate = self;

并将UITableViewDelegate添加到您的界面,如

@interface ClassName ()<UITableViewDelegate>

答案 2 :(得分:-1)

确保您没有可以吞下触摸事件的单元格中的任何内容。按钮和文本字段之类的东西可能导致这种情况。从你的细胞中剥离一切,测试它是否有效,然后慢慢地添加东西以找到罪魁祸首。