3

我有一个UITableView在我的MainViewController哪个类中UITableCell定义了custom CustomCell。我需要一个UIButton在我的CustomCell班级中的 . 来调用MainViewController. 我无法创建一个新实例,MainViewController因为该方法使用了一些变量,如果我创建了一个新实例,这些变量都将处于默认状态。我该怎么办??

这是我的代码:

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

7

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 您可以在方法中将控制器中的方法分配给 UITableView 中的按钮

[cell.yourButton addTarget:self action:@selector(updateLabels) forControlEvents:UIControlEventTouchUpInside];

(只是不要忘记将按钮的 IBOutlet 添加到自定义单元格类中)

于 2013-05-03T01:49:11.727 回答
1

在其他视图中处理更改、操作或用户交互是委托的基本用例。最佳实践是让MainViewController成为 的委托CustomCell,然后当单元格中发生事件(即被tick调用)时,它调用其委托上的某些方法来通知它,然后委托调用updateLabels

保持视图之间的值/状态同步的其他选项是:

于 2013-05-03T01:41:23.573 回答
-1

有趣:) 你需要使用[UIApplication sharedApplication]单例来处理这个。这里有几个步骤:

MainViewController在您的AppDelegate班级中创建对象:

AppDelegate.h进口MainViewController.h

@interface AppDelegate
{
    MainViewController *mvc;
}
@property (strong) MainViewController *mvc;

MainViewController.m

@implementation AppDelegate

@synthesize mvc =_mvc

现在来到你的CustomCell.m

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

    [[(AppDelegate *)[[UIApplication sharedApplication] delegate] hvc] tick:sender];
}

在这里,您看到一个方法被称为 - tick_fromCell:。现在你必须在你的MainViewController类的.hans.m文件中定义这个方法。

MainViewController.h

-(void)tick:(id)sender;

并且在MainViewController.m

-(void)tick:(id)sender {

    NSLog("Clicking from my CustomCell :)");// Here you will put updateLabels method
    [self updateLabels];
}
于 2013-05-03T06:03:51.820 回答