我有一个应用程序,它有一个UITableView
. 它UITableView
是UITableViewCells
在另一个类中自定义定义的,CustomCell
. 这些单元格UITableView
通过在 中定义的按钮添加到UIViewController
. 在单元格中有一个UIButton
,在创建单元格时选择它,并且每次按下按钮时它们都会更改选定状态。我需要NSMutableArray
创建一个包含每个单元格的选定状态的UIButton
。表格视图的第 n 行中按钮的选定状态将位于NSMutableArray
. 如果选择了按钮,我想将 1 添加到数组中,如果未选择按钮,我想将 0 添加到数组中。我将使用该数组来刷新 中的数据UITableView
并稍后进行一些计算。
我的问题:
- 我不知道如何更改特定于我按下时按下的按钮的数组的值,因为该按钮是在另一个类中定义的。
- 如果我在第 n 行选择一个按钮,那么每隔 8 行,这些行上的按钮就会被选中,即使我还没有创建这些单元格,当我创建它们时,按钮也会被选中。(例如,如果我单击第 1 行上的按钮,第 9、17、25 行上的按钮......也会被选中/取消选中)
- 我发现使用该数组的唯一方法是每次需要它时创建一个新数组,方法是遍历每个单元格,UITableView
如果选择/取消选择按钮,则添加 1s/0s。我确信有更好的方法。
这是我的代码:
CustomCell.h
@interface CustomCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UIButton *tickButton;
CustomCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
return self;
}
- (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];
}
}
主视图控制器.h
@interface SplitBillViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) IBOutlet UIBarButtonItem *addItem;
@property (strong, nonatomic) IBOutlet UITableView *itemTable;
主视图控制器.m
@implementation MainViewController{
BOOL lastButtonPressed;
NSInteger n;
NSNumber *a;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return 2;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section==0) return n;
return 4;
}
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier= @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
}
if ([indexPath row]%2==0){
[cell setBackgroundColor:[UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:0.8]];
}
else{
[cell setBackgroundColor:[UIColor colorWithRed:0.94 green:0.94 blue:0.94 alpha:0.9]];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryView = [UIView new];
return cell;
}
}
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
lastButtonPressed=NO;
--n;
[_itemTable reloadData];
}
- (IBAction)addItem:(UIBarButtonItem *)sender {
lastButtonPressed=YES;
++n;
[_itemTable reloadData];
[_itemTable scrollToRowAtIndexPath:[NSIndexPath indexPathForItem:n-1 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
[_itemTable endEditing:YES];
}
-(NSMutableArray*) returnTickArray{
NSMutableArray *tickArray = [[NSMutableArray alloc] initWithCapacity:n];
for (NSInteger i=0; i<n; i++){
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
CustomCell *cell = (CustomCell *) [self.itemTable cellForRowAtIndexPath:indexPath];
// NSLog([NSString stringWithFormat:@"%@",cell.isTicked]);
if ([cell.tickButton isSelected]){
a=[NSNumber numberWithInt:1];
}
else {
a=[NSNumber numberWithInt:0];
};
[tickArray addObject:a];
}
return tickArray;
}
@end
当然,还有更多代码,但我没有复制任何我确定不会影响任何东西的东西。
谢谢!