0

私は次のような単純なBOOLの値を反転しています:

active = !active;
NSLog(@"%@", active? @"active" : @"not active");

私はこれを何度もやりましたが、今のところ、何らかの理由で機能しておらず、本当に腹を立てています。フローがここにヒットするたびに、常に「アクティブ」と出力されます。切り替わらない!!

これが私のインターフェースです:

@interface HeaderView : UIView {
    UILabel *label;
    UIButton *button;
    UIImageView *background;
    BOOL active;
    int section;

    __weak id<HeaderViewDelegate> delegate;
}

アクションが実行される機能:

- (void)actionTUI:(id)sender {
    active = !active;
    NSLog(@"%@", active? @"active" : @"not active");
    UIImage *image = nil;
    if (active) {
        image = [UIImage imageNamed:@"active.png"];
    } else {
        image = [UIImage imageNamed:@"unactive.png"];
    }
    [button setBackgroundImage:image forState:UIControlStateNormal];
    [delegate headerView:self toggled:active];
}

ありがとう

4

2 に答える 2

2

BOOLean 値は、他のすべての型と同様に、別の値が割り当てられない限り、実行時に NULL (0、FALSE、NO) に初期化されます。BOOL に not(NO) を割り当てているため、実行のたびに YES が出力されます。

また、あなたの NSLog() は奇妙です。おそらくそれ自体が間違った方法で評価されており、問題の原因となっている可能性が最も高いです。次のリテラルは含めないでください。

NSLog(active? @"active" : @"not active");
于 2012-06-03T05:14:11.913 に答える
0

わかりました、問題は、切り替えた後、明らかにリコールするテーブルビューをリロードしていたことです:

- (UIView *)tableView:(UITableView *)_tableView viewForHeaderInSection:(NSInteger)section {

これにより、新しいヘッダービューが割り当て/初期化され、アクティブなセットが NO に設定され、トグルの直後に YES に設定されました。そのため、値を反転した後でも、アクティブに設定されていました (直後に破棄され、新しいヘッダービューがその場所に来るため)。

于 2012-06-03T05:23:48.810 に答える