警告: 私は自分の質問に対する答えを探しましたが、いくつかはそれに近づきましたが、まだ何かが欠けています。シナリオは次のとおりです。
テーブル内のデータに基づいて、実行時に動的に esUITableViewCellを含む sを作成する方法が必要です(これは可能です)。UISwitch問題は、そのビューが変更されたときに値を取得できるようにスイッチを接続することになります(ナビゲートする、閉じるなど)。イベントを使用してUIControlEventValueChanged通知しようとしましたが、そのスイッチがタップされたときにダンプするため、正しく指定できませんでした。また、スイッチを一意に識別する方法がないように思われるため、すべてのイベントが 1 つのルーチン (理想的) によって処理される場合、それらを区別することはできません。
そう...
UITableView がある場合:
@interface RootViewController : UITableViewController
{
UISwitch * autoLockSwitch;
}
@property (nonatomic, retain) UISwitch * autoLockSwitch;
-(void) switchFlipState: (id) sender;
@end
// .m ファイル:
@implementation RootViewController
// ...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * CellIdentifier = @"Cell";
int row = 0;
NSString * label = nil;
TableCellDef_t * cell_def = nil;
row = indexPath.row;
cell_def = &mainMenuTableCellsDef[ row ];
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
label = (NSString *) mainMenuTableCellsDef[indexPath.row].text;
[cell.textLabel setText:(NSString *) mainMenuItemStrings[ indexPath.row ]];
if (cell_def->isSpecial) // call special func/method to add switch et al to cell.
{
(*cell_def->isSpecial)(cell ); // add switch, button, etc.
}
else
{
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}
}
and this is the 'special' function:
-(void) autoLockSpecialItem :(UITableViewCell *) cell
{
autoLockSwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[autoLockSwitch addTarget:self action:@selector(switchFlipState:) forControlEvents:UIControlEventValueChanged ];
[cell addSubview:autoLockSwitch];
cell.accessoryView = autoLockSwitch;
}
そして最後に:
-(void) switchFlipState: (id) sender
{
NSLog(@"FLIPPED");
}
================================================== ============
質問:
スイッチをタップするとクラッシュするのはなぜですか (悪いセレクター)? 私のコードは、私が見たすべてのサンプル コードに従っていると思いますが、明らかに何かが間違っています。
インスタンス メソッドを関数ポインタとしてテーブルに配置することはできません。クラスメソッドも好きではないようです。「C/C++」関数にした場合、クラス/インスタンスのメンバー変数にアクセスするにはどうすればよいですか? つまり、メンバー変数
autoLockSpecialItemを取得できるように、呼び出しを静的テーブル (または合理的なファクシミリ)に入れたい場合はどうなりますか?autoLockSwitchそれをクラス メソッドにしてautoLockSwitchvar を static にすると、それは有効になりますか?より簡単に: をビューに接続するにはどうすればよいですか
UIControlEventValueChanged(試行して失敗しました)、変更されたスイッチをイベント ハンドラー内で実行時に区別できますか?より良い方法はありますか?この種の問題を解決しなければならないのは、私が最初だとは信じられません。
長々と申し訳ありませんが、お気遣いに感謝し、すべての助けに感謝します。
:bp: