0

カスタムセル内にスイッチがあります。スイッチは、カスタム セルの .m ファイル内のセルの accessoriesView に割り当てられて設定されます。

ただし、カスタム セルが存在する tableView の ViewController でスイッチを処理するには、セレクター メソッドが必要です。

現在、スイッチをクリックすると、セレクターが見つからないというクラッシュが発生します。おそらく、セルの .m を探しているためです。

セレクターが正しい位置に見えるようにスイッチを宣言するにはどうすればよいですか?

リクエストに応じて編集...

//cell .m
- (void)setType:(enum CellType)type
{
    if (_type == SwitchType)
    {
         UISwitch *switchView = [[UISwitch alloc] init];
         [switchView addTarget:self action:@selector(flip:) forControlEvents:UIControlEventValueChanged];
         self.accessoryView = switchView;
    }
}
4

2 に答える 2

3

デリゲートの仕事のようですね。次のようなセル インターフェイスでプロトコルを作成します。

@protocol MyCellDelegate <NSObject>
- (void)myCell:(MyCell *)sender switchToggled:(BOOL)value;
@end

デリゲートを指定する

id <MyCellDelegate> delegate;

次に、MyCell.m で、スイッチが切り替えられたときにデリゲートが定義されているかどうかを確認し、定義されている場合は次のように呼び出します。

if (self.delegate != nil && [self.delegate respondsToSelector:@selector(myCell:switchToggled:)]) {
    [self.delegate myCell:self switchToggled:switch.value]
}

また、ViewController では、ViewController をセルのデリゲートに設定し、プロトコル メソッドを実装してください。

于 2013-03-19T19:01:15.360 に答える
0

スイッチをパブリック プロパティとして作成し、そのターゲットを設定することができますcellForRowAtIndex:

@interface CustomCell : UITableViewCell

@property (nonatomic, strong) UISwitch *switch;

NSNotificationまたは、解雇されるカスタムを作成することもできます。そして、viewController に通知をリッスンさせてから処理します。

ブロックタスティック:)

ブロックで空想することもできます。

typedef void(^CustomCellSwitchBlock)(BOOL on);

@interface CustomCell : UITableViewCell

@property (nonatomic, readwrite) CustomCellSwitchBlock switchAction;

次に、あなたのCustomCell.m

- (void)handleSwitch:(UISwitch *)switch
{
    switchAction(switch.on);
}

次に、あなたのcellForRowAtIndex:

cell.action = ^(BOOL on){
    if (on) {
        // Perform On Action
    } else {
        // Perform Off Action
    }
};
于 2013-03-19T18:59:08.107 に答える