3

クラスでカスタムs が定義されているUITableViewがあります。のメソッドを呼び出すには、クラスにある が必要です。メソッドがいくつかの変数を使用しているため、新しいインスタンスを作成できません。これらの変数は、新しいインスタンスを作成した場合にすべてデフォルト状態になります。私は何をしますか??MainViewControllerUITableCellCustomCellUIButtonCustomCellMainViewControllerMainViewController

これは私のコードです:

MainViewController.m(これは私が呼び出したいメソッドです):

-(void)updateLabels{
   double totalValue=0, personValue=0;
    [self returnTickArray];
    for(NSInteger i = 0; i < n; i++) {
        totalValue += ([[[self returnPricesArray] objectAtIndex:i] doubleValue] * [[[self returnQtyArray] objectAtIndex:i]doubleValue]);
        if([[[self returnPeopleArray] objectAtIndex:i]doubleValue]>0) personValue += ([[[self returnPricesArray] objectAtIndex:i] doubleValue] * [[[self returnQtyArray] objectAtIndex:i]doubleValue]/ [[[self returnPeopleArray] objectAtIndex:i]doubleValue] * [[[self returnTickArray] objectAtIndex:i]doubleValue]);
    }
    _totalValue.text = [NSString stringWithFormat:@"$ %.02lf", totalValue];
    _tip.text= [NSString stringWithFormat:@"$ %.02lf", totalValue*(([_tipPercentage.text doubleValue]/100))];
    _addedValue.text= [NSString stringWithFormat:@"$ %.02lf",([[_tip.text substringFromIndex:2] doubleValue]+totalValue) ];
    _perPerson.text=[NSString stringWithFormat:@"$ %.02lf", personValue];
}

これはCustomCell.m、ボタンを押したときに呼び出されるメソッドです。

- (IBAction)tick:(UIButton *)sender {

    if ([sender isSelected]) {
        [sender setImage:[UIImage imageNamed:@"off"] forState:UIControlStateNormal];
        [sender setSelected:NO];
        _isTicked = [NSNumber numberWithInt:0];
    }
    else {
        [sender setImage:[UIImage imageNamed:@"on"] forState:UIControlStateSelected];
        [sender setSelected:YES];
        _isTicked = [NSNumber numberWithInt:1];
    }

}
4

3 に答える 3

1

他のビューでの変更、アクション、またはユーザー インタラクションの処理は、デリゲートの重要なユース ケースです。ベスト プラクティスは、 をMainViewControllerのデリゲートにすることです。CustomCellその後、セルでイベントが発生すると (つまり、tickが呼び出されます)、デリゲートの特定のメソッドを呼び出して通知し、デリゲートは を呼び出しますupdateLabels

ビュー間で値/状態の同期を維持するためのその他のオプションは次のとおりです。

于 2013-05-03T01:41:23.573 に答える