web-dev-qa-db-ja.com

iOS、UITableViewの選択した行を見つける方法

次のように、選択したUITableViewCellを見つけようとしています。

 - (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];

  }
    if   ([indexPath row] == [tableView cellForRowAtIndexPath:indexPath.row]) // i want to place value of selected row to populate the buttons 

        //([indexPath row] == 0)

        //(indexPath.row == ![self cellIsSelected:indexPath]) 

    {
        UIButton *AddComment = [UIButton buttonWithType:UIButtonTypeCustom]; // custom means transparent it takes shape same with backgroup image

        [AddComment addTarget:self 
                       action:@selector(TestBtns:)
             forControlEvents:UIControlEventTouchDown];

        // [AddComment setTitle:@"1" forState:UIControlStateNormal];

        AddComment.frame = CGRectMake(9.0, 128.0, 96.0, 26.0);

        [cell.contentView addSubview:AddComment];

        UIImage *buttonAddComment = [UIImage imageNamed:@"addcomment.png"];

        [AddComment setBackgroundImage:buttonAddComment forState:UIControlStateNormal];

        [cell.contentView addSubview:AddComment]; 


    }

これを達成する方法は、私が間違いをしているところで、私をガイドしてください。

NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];
105
Suraj K Thomas

これを使用してくださいデリゲートUITableViewのメソッド

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSLog(@"%d", indexPath.row); // you can see selected row number in your console;
}
16
iPatel

uITableViewDataSourceデリゲートにはメソッドがあります-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath.

選択したセクションと選択した行の両方を含むNSIndexPathオブジェクトを返します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"Selected section>> %d",indexPath.section);
    NSLog(@"Selected row of section >> %d",indexPath.row);
}

それを使用する前にtableviewのデータソースを設定してください。そうしないと、このメソッドは呼び出されません

6
Vaibhav Gautam
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int a = indexPath.row;
    NSLog(@"index: %i",a);
}
2

どのセルが選択されているかを判断するのに役立つ組み込みメソッドを次に示します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // you can use "indexPath" to know what cell has been selected as the following
    NSLog(@"Selected row is %@", indexPath);
}

また、TableViewControllerを作成するときにメソッドが既に指定されている場合は、おそらくコメントを外すだけです。

お役に立てば幸いです

1
CodeLover

あなたがやろうとしているのは、クリックされたテーブルビューセルのインデックスを取得するのではなく、どのセルがクリックされたかを知ることだと思います。

各セルを割り当てるときにこれを知るには、作成されたセルのタグとしてindexpath.row値を割り当て、クリックするとテーブルビューを親として取得し、そのサブビュー(セル)を取得しようとしますそのタグ

[tag:indexpath.rowのあるTableviewビュー]

0
Mini