0

そのため、uitableviewを使用して複数の画像とラベルを表示しています。クリックされたセルのラベルのテキストを確認して、クリックされたセルを識別できるようにしたい。

これを行う理由は、クリックされているセルに対して別のアクションを実行し、別のセルに対して別のアクションを実行したいためです。

これは、(プロトタイプセルからの)セルにCustomCellと呼ばれるクラスからのセル定義を設定する方法です。

//tableview datasource delegate methods
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return cellIconNames.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath{

static NSString *CellIdentifier = @"Cell";

cellIconName = [cellIconNames objectAtIndex:indexPath.row];


NSString *cellIconImageName = [[self cellIconImages] objectAtIndex:[indexPath row]];

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];


if(cell == nil){
    cell = [[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.rightLabel.text = [cellIconNames objectAtIndex:indexPath.row];
cell.carrierImage.image = [UIImage imageNamed:cellIconImageName];
cell.urlString = [cellIconNames objectAtIndex:indexPath.row];

return cell;
}

どちらがクリックされているかを確認する方法は、次のようにすることです。

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

CustomCell *cell = (CustomCell*)[tableView cellForRowAtIndexPath:indexPath];
//[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];

if ([cell.urlString isEqualToString:@"Aetna"]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.aetna.com"]];
}else if([cell.urlString isEqualToString:nil]){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"www.google.com"]];
}
NSLog(@"cell was clicked %@", cell);
}

セルをクリックしても何も起こりません。今、私はそのNSLOGを作成して、セルが正しく読み取られていることを確認できるようにしました。

また、テストコード行をコメントアウトしました。ifelseステートメントをコメントアウトして、コメント化された1行のコードを実行しただけで、何も起こりません。

私を助けてください、私は何が間違っているのか分かりません:/

4

4 に答える 4

1

URLメソッドを文字列に入れてみてください(例:http://)。

于 2012-10-20T22:52:24.250 に答える
0

UITableViewControllerをUITableViewDelegateとして追加し、プログラムまたはInterface Builderでデリゲートをコントローラーに配線し直したことを再確認しますか?

于 2012-10-20T22:51:11.930 に答える
0

あなたのdidSelectRowAtIndexPath方法では、セルを見ているべきではありません。データモデルのデータを確認する必要があります。で行ったようcellForRowAtIndexPathに、indexPathのデータを取得します。次に、データに対して適切なチェックを行います。

于 2012-10-20T22:51:26.437 に答える
0

なぜuが簡単に理解できないのかわかりませんが、didSelectRowAtIndexPathでindexpath.rowを使用するだけで、目的のセルを取得できます。

于 2012-10-21T05:29:41.607 に答える