ワテのブログ

The fundamental things apply As time goes by.

2013年2月23日土曜日

[iOS]テーブルビューのセルにUISwitchを設定する方法

UITableViewのUITableViewCellにUISwitchを設定する方法

UITableViewDelegateのtableView:cellForRowAtIndexPath:メソッドでUISwitchを作成しcellのアクセサリビューに設定する。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
     
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    }
     
    if (indexPath.section == 0)
    {
        if (indexPath.row == 0)
        {
            cell.textLabel.text = @"Title";
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            UISwitch* sw = [[UISwitch alloc] initWithFrame:CGRectZero];
            cell.accesoryView = sw;
        }
    }    
    return cell;
}

Switchのアクションを捕捉したい場合は

[sw addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged];
- (void)cahngeSwitch:(UISwitch)sender
{
    NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell*)[sender superview]];
}
  • UISwitchのsuperviewからUISwitchを設定したUITableViewCellを取得
  • UITableViewのindexPathForCellメソッドでそのcellのindexPathを取得
  • どのcellのUISwitchが操作されたか特定できる