0

私のアプリでは、テーブルビューにスライダーを追加します。つまり、各行にスライダーが含まれており、正常に動作します。

しかし、テーブルビューをスクロールすると、スライダーがリロードされます。つまり、スライダーの値ではなく開始位置が表示されます。

//My code is as follow for slider in table cell:

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];

        return cell;
    }


    UISlider*  theSlider =  [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
        theSlider.maximumValue=99;
        theSlider.minimumValue=0;
        [cell addSubview:theSlider];

return cell;
}

どうすればこれを解決できますか??

4

4 に答える 4

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


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

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; UISlider*  theSlider =  [[[UISlider alloc] initWithFrame:CGRectMake(174,12,120,23)] autorelease];
    theSlider.maximumValue=99;
    theSlider.minimumValue=0;
    [cell addSubview:theSlider];
}  return cell;

このようにして、セルが nil の場合にのみスライダーが作成されます。つまり、セルが作成されます。そしてtableView:willDisplayCell:forRowAtIndexPath:メソッドを使用して、slider.value = yourvalue; のようにスライダーの値を設定します。

于 2013-02-21T11:25:44.387 に答える
2

スライダービューの値を保存し、スライダービューの値を設定する必要がありますcellForRowAtIndexPath slider.value = yourvalue;

于 2013-02-21T11:20:17.520 に答える
1

これは本当に" cellForRowAtIndexPath"メソッドからです。スクロールするたびに、すべてのセルが取得nilされ、再初期化されます。カスタムセルクラスの作成(のサブクラスの作成によるUITableViewCell)と、条件「if」の定義スライダーを試してみるとよいでしょう(cell == nil)

于 2013-02-21T11:29:51.313 に答える
1

問題は、cellForRowAtIndexPath1回だけではなく、tableViewがそのセルをレンダリングする必要があるたびにtheSlider呼び出されることです.

最善の方法は、カスタムを定義し、UITableViewCellそこに を格納するプロパティを配置してから、 が呼び出されtheSliderたときに、cellForRowAtIndexPathそれが既に初期化されているかどうかを確認することです。以下を参照してください。

// If the slider is not yet initialized, then do it
if(cell.theSlider == nil)
{
    // Init...
}
于 2013-02-21T11:22:54.100 に答える