0

テーブルに 1)customcell を作成し、セル内に 1 つのボタンと 1 つのスライダーがあります。

           NSString *CellIdentifier = [NSString stringWithFormat:@"%d",indexPath.row];

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

           }
    UIButton* Btn_music=[[UIButton alloc] initWithFrame:CGRectMake(130,180, 50,50)];

                if (indexPath.row==play_tg)
                {
                     [Btn_music setImage:[UIImage imageNamed:@"pausemusic.png"] forState:UIControlStateNormal];

                }else
                {
                    [Btn_music setImage:[UIImage imageNamed:@"playmusic.png"] forState:UIControlStateNormal];
                }             

              [Btn_music addTarget:self action:@selector(playAudio:) forControlEvents:UIControlEventTouchUpInside];
              Btn_music.tag = indexPath.row;
              [obj_TextMusicCell.contentView addSubview:Btn_music];
              [background bringSubviewToFront:Btn_music];
 UISlider *progress = [[UISlider alloc] initWithFrame:CGRectMake(180,195,320,10)];
            [progress setBackgroundColor:[UIColor clearColor]];
            progress.minimumValue = 0.0;
            progress.maximumValue=1.0;
            progress.continuous = YES;
            progress.value = 0.0;
            progress.tag=indexPath.row+1;
            NSLog(@"tag for slider========>%d",progress.tag);
            //[progress setTag:indexPath.row];
            [progress addTarget:self action:@selector(sliderChanged:) forControlEvents:UIControlEventValueChanged];
            [obj_TextMusicCell.contentView addSubview:progress];

2)ボタンのIBACTIONイベントは、セルをフェッチし、スライダーが移動するメソッドを呼び出しました。

-(IBAction)playAudio:(id)sender
{
    UIButton *Btn_music=sender;    

    cell_Access = (TextMusicCell *)[tbl_tellTale viewWithTag:0];
    NSIndexPath *indexPath = [tbl_tellTale indexPathForCell:cell_Access];
     NSLog(@"cellindex==>%d",indexPath.row); 
if ( timer==nil)
        {
          timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(SongProgress) userInfo:nil repeats:YES];
           [timer fire];
        }

}

3)スライダーのメソッドには次のものがあります:-

-(IBAction)SongProgress
{

   UISlider* progress = (UISlider *)[cell_Access viewWithTag:1];
}

4)完璧に動作しますが、テーブルビューをスクロールしたり、アプリケーションがクラッシュしたりして、以下のエラーが表示されます:-

-[UIButton setValue:]: unrecognized selector sent to instance 0x96f9660
2013-02-20 19:54:21.008 shc[3776:19d03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIButton setValue:]: unrecognized selector sent to instance 0x96f9660'
*** First throw call stack:
(0x3dba012 0x2777e7e 0x3e454bd 0x3da9bbc 0x3da994e 0x108d1b 0x21c0b90 0x3d79376 0x3d78e06 0x3d60a82 0x3d5ff44 0x3d5fe1b 0x33de7e3 0x33de668 0x16bf65c 0x2cb6 0x2be5 0x1)
libc++abi.dylib: terminate called throwing an exception

-[UIButton setValue:]: 認識されないセレクターがインスタンスに送信されました

私を助けてください

4

2 に答える 2

0

UIBUTTON* btn_music と UISlider *progress に同じタグ値を使用しているため、UISlider *progress を取得する UIBUTTON インスタンスは、UIBUTTON に 1 ~ 200 のタグ値を使用し、UISlider *progress に 201 と値を使用する場合のように、両方に異なるタグ値を使用します。

于 2013-02-22T09:05:09.313 に答える
-1

あなたはおそらく の最初の部分を行ってい- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathます。そうであれば、そのセルをレンダリングする必要があるたびに新しいものUIButtonsを作成しています...UISlidersUITableView

UIButtonandのプロパティを追加しUISlider、それらが初期化されているかどうかを確認する必要があります...

編集:

プロパティがあり、カスタム UITableViewCell で定義されている場合は、Btn_musicそれらprogressを合成してから、次のように初期化する必要があります。

// If the Button is not yet initialized, then do it
if(obj_TextMusicCell.Btn_music == nil)
{
    // Here you should do the initialization code that only have to be done the first time
    obj_TextMusicCell.Btn_music=[[UIButton alloc] initWithFrame:CGRectMake(130,180, 50,50)];
    obj_TextMusicCell.Btn_music.tag = indexPath.row;
    [obj_TextMusicCell.contentView addSubview:Btn_music];
}

// Now it already exists, just update it...
if(indexPath.row==play_tg)
{
    [obj_TextMusicCell.Btn_music setImage:[UIImage imageNamed:@"pausemusic.png"] forState:UIControlStateNormal];
}
else
{
    [obj_TextMusicCell.Btn_music setImage:[UIImage imageNamed:@"playmusic.png"] forState:UIControlStateNormal];
}

と同じ考えに従ってくださいUISlider。あなたはそれを手に入れました...

于 2013-02-20T14:49:25.780 に答える