6

たくさんのボタン、テキストフィールド、ラベル、ビューを備えたカスタムUITableViewCellがあります。各インデックスパスで必要な場所を非表示にして表示します。しかし、何らかの理由で行をクリックできません!

私はコードを介して次のことを実行し、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];

お役に立てれば!

PS

.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 に答える