6

我有一个自定义 UITableViewCell 有很多按钮、文本字段、标签和一个视图。我将它们隐藏并显示在每个索引路径上需要它们的位置。但由于某种原因/s 行不可点击!

我什至通过代码完成了以下事情,以确保如果 IB 中出现问题,可以通过这些行修复它但没有用。

cell.selectionStyle = UITableViewCellSelectionStyleBlue;
cell.userInteractionEnabled = YES;

我想知道隐藏视图是否是这里的罪魁祸首或其他原因?

4

8 回答 8

6

尝试这个 tableView.allowsSelection=YES;

你可以实施-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:

于 2012-11-12T18:24:15.547 回答
3

我在我的 UITableViewCells 中也使用了很多不同的 UI 元素,为什么不尝试继承 UITableViewCell 并滚动你自己的类,将项目作为单元格的属性?似乎对我有用。

在 VincentsAwesomeCell.h 中:

@interface VincentsAwesomeCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *FooLabel;
@property (weak, nonatomic) IBOutlet UILabel *BarLabel;
@property (weak, nonatomic) IBOutlet UIImageView *ShimmyIcon;
@property (weak, nonatomic) IBOutlet UILabel *DooWopLabel;
@property (weak, nonatomic) IBOutlet UIImageView *UseIcon;
@property (weak, nonatomic) IBOutlet UILabel *TheForceLabel;
@property (weak, nonatomic) IBOutlet UIImageView *bobSledIcon;
@property (weak, nonatomic) IBOutlet UILabel *WristWatchLabel;
@property (weak, nonatomic) IBOutlet UILabel *MeatLoafLabel;
@property (weak, nonatomic) IBOutlet UILabel *SciFiLabel;
@property (weak, nonatomic) IBOutlet UILabel *CollinderLabel;
@property (weak, nonatomic) IBOutlet UILabel *RhubarbLabel;
@property (weak, nonatomic) IBOutlet UITextField *SuperTextField;
@property (weak, nonatomic) IBOutlet UIStepper *stepper;
@property (strong, nonatomic) IBOutlet UILabel *amountOfAwesomeness;

不要忘记使用:

在 VincentsAwesomeCell.m 中:

- (void)prepareForReuse {
    [super prepareForReuse];
    // Always call this!
    // Reset custom stuff
}

重置单元格的属性以供重用。

然后在您的 TableViewController.m 中:

- (void) viewDidLoad
{
    [super viewDidLoad];
    // Register the custom VincentsAwesomeCell NIB with the tableview
    UINib *nib = [UINib nibWithNibName:@"VincentsAwesomeCell" bundle:nil];
    [[self tableView] registerNib:nib forCellReuseIdentifier:@"VincentsAwesomeCell"];
}

至于

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

我将它用于 UIStepper 以跟踪按下哪个步进器,例如:

[[cell stepper]setTag:indexPath.row];
    [[cell stepper]addTarget:self action:@selector(stepperChanged:) forControlEvents:UIControlEventValueChanged];

希望这可以帮助!

附言

我使用 .xib 文件来创建自定义单元格的布局。只需将 UITableViewCell 拖入 InterFaceBuilder 并自定义即可!不要忘记链接属性!

于 2012-11-15T09:54:47.357 回答
2

这是自定义的示例UITableView

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell    = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {

    cell= [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

}
cell.selectionStyle = UITableViewCellSelectionStyleNone;

UILabel *lbl = [[UILabel alloc]initWithFrame:cell.frame];
lbl.backgroundColor = [UIColor clearColor];

UIImageView *cellImage = [[UIImageView alloc]initWithImage:    [arrayImages objectAtIndex:indexPath.row]];
if (pointRange.location!=NSNotFound) {


    cellImage.frame = CGRectMake(25,12.5, 75, 75);
    lbl.frame = CGRectMake(0, 0, tableView.frame.size.width, 100);
    lbl.font =  [UIFont fontWithName:@"PineappleDemo" size:30.0];
}

lbl.textColor =[UIColor colorWithRed:38.0/255.0 green:34.0/255.0 blue:98.0/255.0 alpha:1.0];
lbl.text =[arrayData objectAtIndex:indexPath.row];




for(UIView *v in [cell subviews])
{
    if([v isKindOfClass:[UILabel class]]||[v isKindOfClass:[UIImageView class]]||[v isKindOfClass:[UIButton class]])
        [v removeFromSuperview];
}
if (index == indexPath.row) {

    UILabel *lbl2 = [[UILabel alloc]initWithFrame:CGRectMake(50, 90, tableView.frame.size.width-200, 100)];
     lbl2.backgroundColor = [UIColor clearColor];
     lbl2.numberOfLines = 0;
    lbl2.text = [arrayOffers objectAtIndex:indexPath.row];
    [cell addSubview:lbl2];
    [lbl2 release];

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(tableView.frame.size.width-150, 100, 120, 84);
    btn.backgroundColor = [UIColor clearColor];

    if (indexPath.row<=2) {
        switch (indexPath.row ) {
            case 0:
                [btn setImage:[UIImage imageNamed:@"lickFB.png"] forState:UIControlStateNormal];

                [btn addTarget:self action:@selector(facebook) forControlEvents:UIControlEventTouchUpInside];
                break;
            case 1:
                [btn setImage:[UIImage imageNamed:@"follow.png"] forState:UIControlStateNormal];

                [btn addTarget:self action:@selector(twitter) forControlEvents:UIControlEventTouchUpInside];
                break;
            case 2:

                [btn setImage:[UIImage imageNamed:@"rateUs.png"] forState:UIControlStateNormal];

                [btn addTarget:self action:@selector(rateAction) forControlEvents:UIControlEventTouchUpInside];

                break;

            default:
                break;
        }

    }
    else{
        [btn setImage:[UIImage imageNamed:@"Buy_Button.png"] forState:UIControlStateNormal];
        switch (indexPath.row) {
            case 3:
                [btn addTarget:self action:@selector(deal1) forControlEvents:UIControlEventTouchUpInside];
                break;
            case 4:
                [btn addTarget:self action:@selector(deal2) forControlEvents:UIControlEventTouchUpInside];
                break;
            case 5:
                [btn addTarget:self action:@selector(deal3) forControlEvents:UIControlEventTouchUpInside];
                break;

            case 6:
                [btn addTarget:self action:@selector(deal4) forControlEvents:UIControlEventTouchUpInside];
                break;



            default:
                break;
        }

    }
    [cell addSubview:btn];

}

[cell addSubview:lbl];
[cell addSubview:cellImage];
[cellImage release];
[lbl release];
return cell;

}
于 2012-11-14T09:16:34.400 回答
1

在您的自定义 UITableViewCell 中,您是否将 btn、文本字段等添加到 contentView?

也许如果您将所有内容添加到 contentView,那应该可以解决您的问题。希望能帮助到你。

于 2012-11-12T18:39:38.253 回答
1

如果您的表格视图是可编辑的,这可能是单元格不可点击的原因

如果是这种情况,并且您确实需要在编辑时可以单击单元格 - 只需执行以下操作:

tableView.allowsSelectionDuringEditing = YES;
于 2012-11-09T20:45:27.010 回答
0

如果您不能真正正确触发“didSelectRowAtIndexPath”,请放置一个占据整个单元格的 BIG UIButton 并在按钮单击中执行必要的操作。只是一个想法!:-)

于 2012-11-17T06:06:54.133 回答
0

我有类似的问题。解决了但添加

self.clipsToBounds = YES;

到我的 tableView 所在的视图。所以我确定,我的 tableView 超出了其父视图的框架。

于 2013-10-18T22:06:47.667 回答
0

实现这个方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
于 2012-11-11T13:08:42.547 回答