3

UITableViewでプログラムによって2つのボタンを作成しました。
つまり、編集、削除、

セルをクリックするとこれらのボタンが表示されますが、[編集]または[削除]ボタンをクリックしようとすると、適切なメソッド、つまりeditまたはdeleteBtnが呼び出されません。
これは私のコードです。

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

    NSString *cellValue=[firstName objectAtIndex:indexPath.row];
    cell.textLabel.text=cellValue;


    edit=[[UIButton alloc]init];
    [edit setTitle:@"Edit" forState:UIControlStateNormal];
    [edit setFrame:CGRectMake(100, 100, 100, 20)];
    [edit setTag:1];
    [edit addTarget:self action:@selector(edit) forControlEvents:UIControlEventTouchUpInside];

    delete=[[UIButton alloc]init];
    [delete setTitle:@"Delete" forState:UIControlStateNormal];
    [delete setFrame:CGRectMake(150, 100, 100, 20)];
    [delete setTag:2];
    [delete addTarget:self action:@selector(deleteBtn) forControlEvents:UIControlEventTouchUpInside];

    [cell.contentView addSubview:delete];
    [cell.contentView addSubview:edit];

    return cell;

}

私の編集と削除機能はとてもシンプルです

-(void)edit{

NSLog("%@",selectedValue);
}

-(void)deleteBtn{

NSLog("%@",selectedValue);
}

ブレークポイントを適用してこの関数をチェックしましたが、呼び出されません。

これが私のselectedValueの出方です

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
selectedValue=[firstName objectAtInder:indexPath.row];
}

よろしくお願いします、
アルン。

4

10 に答える 10

2

以下のようなコードをお願いします

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

NSString *cellValue=[firstName objectAtIndex:indexPath.row];
cell.textLabel.text=cellValue;


edit=[[UIButton alloc]init];
[edit setTitle:@"Edit" forState:UIControlStateNormal];
[edit setFrame:CGRectMake(100, 5, 100, 20)];
[edit setTag:indexPath.row];
[edit addTarget:self action:@selector(edit:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:edit];   

delete=[[UIButton alloc]init];
[delete setTitle:@"Delete" forState:UIControlStateNormal];
[delete setFrame:CGRectMake(210, 5, 100, 20)];
[delete setTag:indexPath.row];
[delete addTarget:self action:@selector(deleteBtn:) forControlEvents:UIControlEventTouchUpInside];
[cell addSubview:delete];

return cell;

}

以下のような方法を使用してください

-(IBAction)edit:(id)sender
{
    int tag = [sender tag];
    NSString *str = [firstName objectAtIndex:tag];
    NSLog("%@",str);
 }

 -(IBAction)deleteBtn:(id)sender
 {
    int tag = [sender tag];
    NSString *str = [firstName objectAtIndex:tag];
    NSLog("%@",str);
 }
于 2013-03-18T06:04:09.727 に答える
2

考えてみてください、問題はUIButtonフレームにあります。コードでは、両方のボタンorigin.yが100.0であるため、セルの境界を超えました(デフォルトの高さは44.0です)。

UIButtonこのように両方のフレームを変更すると、それは私のために働きます。

UIButton *  edit =[[UIButton alloc]init];
[edit setBackgroundColor:[UIColor blackColor]];
[edit setTitle:@"Edit" forState:UIControlStateNormal];
**[edit setFrame:CGRectMake(100,5.0,100, 30)];**
[edit setTag:1];
[edit addTarget:self action:@selector(edit) forControlEvents:UIControlEventTouchUpInside];

UIButton*  delete=[[UIButton alloc]init];
[delete setBackgroundColor:[UIColor blackColor]];
[delete setTitle:@"Delete" forState:UIControlStateNormal];
**[delete setFrame:CGRectMake(200,5.0,100,30)];**
[delete setTag:2];
[delete addTarget:self action:@selector(deleteBtn) forControlEvents:UIControlEventTouchUpInside];

[cell.contentView addSubview:delete];
[cell.contentView addSubview:edit];
于 2013-03-18T06:13:37.063 に答える
1

CFRAIPを呼び出すたびにボタンが作成されるため、ボタンはセルに何度も追加されます。それらをcell == nilブロックに移動します。

-(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];
        edit=[UIButton buttonWithType:UIButtonTypeRoundedRect];;
        [edit setTitle:@"Edit" forState:UIControlStateNormal];
        [edit setFrame:CGRectMake(100, 100, 100, 20)];
        [edit setTag:1];
        [edit addTarget:self action:@selector(edit) forControlEvents:UIControlEventTouchUpInside];

        delete=[UIButton buttonWithType:UIButtonTypeRoundedRect];;
        [delete setTitle:@"Delete" forState:UIControlStateNormal];
        [delete setFrame:CGRectMake(150, 100, 100, 20)];
        [delete setTag:2];
        [delete addTarget:self action:@selector(deleteBtn) forControlEvents:UIControlEventTouchUpInside];

        [cell.contentView addSubview:delete];
        [cell.contentView addSubview:edit];
    }

    NSString *cellValue=[firstName objectAtIndex:indexPath.row];
    cell.textLabel.text=cellValue;
    return cell;

}
于 2013-03-18T06:02:06.247 に答える
1

問題はにありますsetFrame

テーブルセルの高さは、ボタンに設定した座標よりも低くなっています。コードをに変更します

[edit setFrame:CGRectMake(100, 5, 100, 20)]; 

これでうまくいきます。

また

テーブルの行を増やすだけです。heightデフォルトでは44

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
于 2013-03-18T06:20:28.843 に答える
0

編集と削除はObjectiveCですでに定義されているキーワードであるため、plsはボタン名を変更します

于 2013-03-18T06:06:40.773 に答える
0

カスタムセルを試してみたり、カスタムセルビューにボタンを追加して以下のコードを実装したりできますか。

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

    static NSString *CellIdentifier = @"Cell";

    cell = [self.tbl dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {


        //****cell recent deal buy button click goes to login or check out pageview 
        //[cell.btn setTag:indexPath.row];
        //[cell.btn addTarget:self action:@selector(buybutton_checkout:)
       //   forControlEvents:UIControlEventTouchDown];
       // cell.btn.hidden=NO;


        NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"icel" owner:nil options:nil];

        for (UIView *view in views)
        {
            if([view isKindOfClass:[UITableViewCell class]])
            {

                cell = (icel*)view;

            }

        }
    }

   //tbl.layer.cornerRadius = 3.9;
    //[tbl setClipsToBounds:YES];


    [cell.activity startAnimating]; 

    [cell.btn setTitle:_BUYNOW_BTN forState:UIControlStateNormal];
    [cell.btn setTag:indexPath.row];
    [cell.btn addTarget:self action:@selector(Buy_btnlck:)
                forControlEvents:UIControlEventTouchDown];
        //cell.btn.hidden=NO;
    cell.title_lbl.text=[[_today_similardeal_title_ary objectAtIndex:indexPath.row]capitalizedString];


        index_tbl=indexPath.row;
    return cell;
    }
}
-(IBAction)Buy_btnlck:(UIButton *)button
{
NSInteger intvalue=[[NSString stringWithFormat:@"%ld",(long int)[button tag]]intValue];
}
于 2013-03-18T06:07:31.847 に答える
0

これを使ってみてください....そして削除ボタンにも同じことをしてください..........

if (cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

        // -------------------- Add button to cell --------------
        edit = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 20)];

        [edit setTitle:@"Edit" forState:UIControlStateNormal];
        [edit setTag:1];
        [edit addTarget:self action:@selector(edit)   forControlEvents:UIControlEventTouchUpInside];        

        [cell.contentView addSubview:edit];
    }
于 2013-03-18T06:03:13.603 に答える
0

このようにコードを変更します。

以下の2行を置き換えてください...

edit=[[UIButton alloc] init];
delete=[[UIButton alloc] init];

このように...

UIButton *edit = [UIButton buttonWithType:UIButtonTypeRoundedRect];

UIButton *delete=[UIButton buttonWithType:UIButtonTypeRoundedRect]];
于 2013-03-18T06:08:39.670 に答える
0

使用しないでください[UIButton alloc] init]。代わりにこれを使用してください

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self 
           action:@selector(edit:)
 forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Edit" forState:UIControlStateNormal];
 button.frame = CGRectMake(80.0, 21.0, 40.0, 40.0);
[view addSubview:button];

Where viewは、ボタンをサブビューとして追加するビューです。要件に応じてボタンフレームを設定することもできます。

于 2013-03-18T06:10:39.827 に答える
0

これを試して::

テーブル方式

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Configure the cell.
   UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

   if(cell==nil){
      cell= [[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier] autorelease];

      NSString *cellValue=[firstName objectAtIndex:indexPath.row];
      cell.textLabel.text=cellValue;

      UIButton *btnEdit=[UIButton buttonWithType:UIButtonTypeCustom];
      [btnEdit setTitle:@"Edit" forState:UIControlStateNormal];
      [btnEdit setFrame:CGRectMake(100, 100, 100, 20)];
      [btnEdit setTag:indexPath.row];
      [btnEdit addTarget:self action:@selector(clickEdit:) forControlEvents:UIControlEventTouchUpInside];

      [cell.contentView addSubview:btnEdit];


      UIButton *btnDelete=[UIButton buttonWithType:UIButtonTypeCustom];
      [btnDelete setTitle:@"Delete" forState:UIControlStateNormal];
      [btnDelete setFrame:CGRectMake(150, 100, 100, 20)];
      [btnDelete setTag:indexPath.row];
      [btnDelete addTarget:self action:@selector(clickDelete:) forControlEvents:UIControlEventTouchUpInside];

      [cell.contentView addSubview:btnDelete];
   }
   return cell;
}

次に、ボタンアクションメソッド

-(IBAction)clickEdit:(id)sender
{
   NSString *str = [firstName objectAtIndex:[sender tag]];
   NSLog("Name :: %@",str);
}

-(IBAction)clickDelete:(id)sender
{
   NSString *str = [firstName objectAtIndex:[sender tag]];
   NSLog("Name :: %@",str);
}

うまくいけば、それはあなたを助けるでしょう。

ありがとう。

于 2013-03-18T06:23:46.833 に答える