iOS:UITableViewCell类中的按钮,用于在主UIViewController上调用方法

时间:2013-05-03 01:19:28

标签: iphone ios objective-c uitableview

我的UITableView上有一个MainViewController,其中UITableCell类定义了自定义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];
    }

}

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:-1)

有趣的是:) 您需要使用[UIApplication sharedApplication]单例来处理此问题。 以下是几个步骤:

MainViewController课程中创建AppDelegate的对象:

<{1}}导入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 ans .h个文件中定义此方法。

.m

中的

MainViewController.h

并在-(void)tick:(id)sender;

MainViewController.m