0

あなたの一日はどうですか、すべてがうまくいったことを願っています

私の質問は、 uitableviewcell に uiswitch があることです。ただし、contentview を使用してスイッチをセルのサブビューとして追加すると、セルに表示されませんか? 各カスタムセルに表示されない理由を知っていますか? 前もって感謝します 。

これが私のコードです:

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

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

    UISwitch *switchController = nil ;

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

      switchController=  [[UISwitch alloc] initWithFrame:CGRectZero];
        switchController.tag=100;
        [cell.contentView addSubview:switchController];
        CGRect switchFrame = switchController.frame;
        switchFrame.origin.x = 50.0f;
        switchFrame.origin.y = 10.0f;
        switchController.frame = switchFrame;
        [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];

    }

    else
    {
        switchController =(UISwitch *)[cell.contentView viewWithTag:100];

    }

//This for persist switch state when scroll up or down 
    if ([[[self.SwitchArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ]isEqualToString:@"ON"])
    {

        switchController.on=YES;

    }
    else
    {
        switchController.on=NO;
    }

   NSString *value = [[mainArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    cell.textLabel.text = value;
    cell.textLabel.textAlignment = NSTextAlignmentRight;
    cell.textLabel.font = [UIFont systemFontOfSize:15.0];

    return cell;

}

SwitchChanged のコードは次のとおりです。

-(void)switchChanged:(UISwitch *)sender
{
    UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview];
    NSIndexPath *index=[mainTableView indexPathForCell:cell];

    if (sender.on)
    {

        [[self.SwitchArray objectAtIndex:index.section] replaceObjectAtIndex:index.row withObject:@"ON"];

    }
    else
    {
        //Update my switch states array 
        [[self.SwitchArray objectAtIndex:index.section] replaceObjectAtIndex:index.row withObject:@"OFF"];

   }

    [padFactoids setObject:[NSKeyedArchiver archivedDataWithRootObject:SwitchArray] forKey:@"savedArray"];
    [padFactoids synchronize];

}
4

4 に答える 4

0

switchController の幅と高さは 0 です。最初に CGRectZero でスイッチを初期化し、その後原点座標を変更しますが、幅と高さは 0 のままです。

于 2013-04-26T09:15:12.153 に答える
0

あなたのコメントから、テーブルビューを作成するためにストーリーボードを使用していることを知りました。テーブル ビューのプロトタイプ セルにスイッチを追加し、タグに 100 を指定します。

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

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
 UISwitch *switchController =(UISwitch *)[cell viewWithTag:100];

 [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];

//This for persist switch state when scroll up or down 
if ([[[self.SwitchArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ]isEqualToString:@"ON"])
{

    switchController.on=YES;

}
else
{
    switchController.on=NO;
}

 NSString *value = [[mainArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
cell.textLabel.text = value;
cell.textLabel.textAlignment = NSTextAlignmentRight;
cell.textLabel.font = [UIFont systemFontOfSize:15.0];

return cell;


}
于 2013-04-26T09:40:28.503 に答える
0

さて、私はあなたの問題を見つけました。このようにしてみてください。ここでの問題は、スイッチを追加した後、セル ラベルにタイトルを付けているということです。これは、ラベルがスイッチを隠していることを意味します。

Problem: cell.textLabel はスイッチを非表示にします。

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

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

        UISwitch *switchController = nil ;

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

        NSString *value = [[mainArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
        cell.textLabel.text = value;
        cell.textLabel.textAlignment = NSTextAlignmentRight;
        cell.textLabel.font = [UIFont systemFontOfSize:15.0];
          switchController=  [[UISwitch alloc] initWithFrame:CGRectZero];
            switchController.tag=100;
            [cell.contentView addSubview:switchController];
            CGRect switchFrame = switchController.frame;
            switchFrame.origin.x = 50.0f;
            switchFrame.origin.y = 10.0f;
            switchController.frame = switchFrame;
            [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];

        }

        else
        {
            switchController =(UISwitch *)[cell.contentView viewWithTag:100];

        }

    //This for persist switch state when scroll up or down 
        if ([[[self.SwitchArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row ]isEqualToString:@"ON"])
        {

            switchController.on=YES;

        }
        else
        {
            switchController.on=NO;
        }



        return cell;

    }
于 2013-04-26T09:18:14.473 に答える
0

最初のことは、そのスイッチの幅と高さが 0 のフレームがあることです。第 2 に、プロトタイプ セルを含むストーリーボードを使用している場合、その中にまったく入らない可能性がありますif (cell == nil)。お役に立てれば。

編集:

ストーリーボードのスイッチをプロトタイプ セルに追加する方が簡単ですが、プログラムで追加する場合は、コードを if の外に移動して、次のような条件を追加できます。

UISwitch *switchController = (UISwitch *)[cell viewWithTag:100];
if (!switchController) {
      switchController=  [[UISwitch alloc] initWithFrame:CGRectZero];
      switchController.tag=100;
      [cell.contentView addSubview:switchController];
      CGRect switchFrame = switchController.frame;
      switchFrame.origin.x = 50.0f;
      switchFrame.origin.y = 10.0f;
      switchController.frame = switchFrame;
      [switchController addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
}

もちろん、幅と高さを設定することを忘れないでください。

于 2013-04-26T09:12:29.247 に答える