在tableView上使用CustomCell,如何调用didSelectRowAtIndexPath?

时间:2011-07-15 01:22:58

标签: iphone didselectrowatindexpath custom-cell

我正在使用CustomCells填充UITableView,我正在尝试调用didSelectRowAtIndexPath。这是Custom Cell的标题。

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell {
    IBOutlet    UILabel         *bizNameLabel;
    IBOutlet    UILabel         *addressLabel;
    IBOutlet    UILabel         *mileageLabel;
    IBOutlet    UIImageView     *bizImage;
}

@property (nonatomic, retain) UILabel     *bizNameLabel;
@property (nonatomic, retain) UILabel     *addressLabel;
@property (nonatomic, retain) UILabel     *mileageLabel;
@property (nonatomic, retain) UIImageView *bizImage;
@end

非常简单明了。我有一个detailDisclosureButton我也在单元格中的cellForRowAtIndexPath方法中添加了单元格,并且正在调用方法accessoryButtonTappedForRowWithIndexPath:,但是didSelectRowAtIndexPath不是。

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

    static NSString *CellIdentifier = @"CustomCell";

    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCellView" 
                                                     owner:self options:nil];

#ifdef __IPHONE_2_1
        cell = (CustomCell *)[nib objectAtIndex:0];
#else
        cell = (CustomCell *)[nib objectAtIndex:1];
#endif
    }

    // Configure the cell.
    NSDictionary *dict = [rows objectAtIndex: indexPath.row];

        /*
          CODE TO POPULATE INFORMATION IN CUSTOM CELLS HERE
       */

#ifdef __IPHONE_3_0
    cell.accessoryType =  UITableViewCellAccessoryDetailDisclosureButton;
#endif

    return cell;
}

我在所有方法中都放置了一个NSLog以及断点。我试图调用的方法不是,但在我的CustomCell类中,以下方法是。那么在使用CustomCell时有没有办法让didSelectRowAtIndexPath被调用?

- (void)setSelected:(BOOL)selected animated:(BOOL)animated 

4 个答案:

答案 0 :(得分:1)

自定义单元格与否应该没有任何区别。你在编辑模式吗?如果是,则必须在tableView上设置allowsSelectionDuringEditing = true

答案 1 :(得分:0)

如果您在xib中使用Tableview,那么你想在文件所有者中提供tableview的数据源和委托连接。

答案 2 :(得分:0)

由于您说调用tableView:accessoryButtonTappedForRowWithIndexPath:,我们知道您的tableView的委托属性已正确设置。所以tableView:didSelectRowAtIndexPath:也应该被调用。如果它没有被调用,我最好的猜测是你在方法签名的某个地方有一个拼写错误。将此方法签名复制并粘贴到您的代码中,以确保您不会意外地省略“tableView:”部分或出现大写错误。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

编辑:辅助假设:在您定义自定义单元格的.xib中,确保选中“启用用户交互”。

答案 3 :(得分:0)

检查你是否为myTableView的父视图设置了UITapGestureRecognizer ..这可能超过触摸事件并消耗它。