0

tableViewを持つUITableViewControllerがあります。各セルには、チェックボックスのように選択/選択解除できるボタンがあり、これを行うメソッドは正常に機能しています。このリストを繰り返し処理して、すべてのボタンを一度に選択できる、tableheaderview のボタンによって呼び出される別のメソッドが必要です。皮肉なことに、反復を実行できますが、ボタンを選択/選択解除するメソッドを呼び出すことができないようです。

これが私の関連コードです:

//This is my method does the iteration
- (void) startWizard {

    NSLog(@"Did it select?");

    for (int i = 0; i < [self.tableView numberOfSections]; i++) {
        for (int j = 0; j < [self.tableView numberOfRowsInSection:i]; j++) {
            NSUInteger ints[2] = {i,j};
            NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:ints length:2];
            UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
            //Here is my code to call the method that selects/deselects
            [self buttonTouched:nil];



        }
    }
}

そして、個々のボタンの実際の選択/選択解除を行う(そして正常に動作する)メソッドは次のとおりです。

-(void)buttonTouched:(id)sender
{
    UIButton *btn = (UIButton *)sender;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"CheckBox1.png"]])
    {
        [btn setImage:[UIImage imageNamed:@"CheckBox2.png"] forState:UIControlStateNormal];
        // other statements
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"CheckBox1.png"] forState:UIControlStateNormal];
        // other statements
    }

}

各セルのボタンは、次のように accesseryView としてそのセルに追加されています。

[cell setAccessoryView:testButton];

誰が私が間違っているのか、どうすればこれを修正できるのかを見ることができますか?

4

1 に答える 1

0

ループ内で呼び出すときは、 の値として[self buttonTouched:nil];メソッドbuttonTouchedを呼び出します。したがって、setの最初の行と残りのメソッドは nil ボタンで動作します。実際のボタン オブジェクトを渡す方法を見つけるか、indexPath を渡して正しいボタンを見つけます。nilsenderbuttonTouchedbtnnilbuttonTouched

于 2013-01-08T17:43:02.783 に答える