我的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];
}
}
答案 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
。
在视图之间保持值/状态同步的其他选项是:
NSNotification
通过NSNotificationCenter
发送 - 最适合用于操作答案 2 :(得分:-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
ans .h
个文件中定义此方法。
.m
中的
MainViewController.h
并在-(void)tick:(id)sender;
MainViewController.m