0

我有一个联系人列表,他们的名字旁边有一个复选框。

1 http://i.minus.com/jyLvkUt7wnxYs.png

我想在选中单元格文本时将其存储到数组中,当未选中时将其从数组中删除。我的代码只有在选择 1 时才能正常工作,但是当我选择多个复选框时,当我记录它时,它只给我 1 个值。下面是我的代码。

#import <UIKit/UIKit.h>
#import "AddressBookViewController.h"

@class AddressBookViewController;

@interface AddressBookCell : UITableViewCell {
IBOutlet UIButton *checkbox;
NSMutableArray *array;

}

@property (nonatomic, retain) IBOutlet UIButton *checkbox;
@end

.m 文件

#import "AddressBookCell.h"

@implementation AddressBookCell
@synthesize checkbox;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    self.checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect checkboxRect = CGRectMake(135, 150, 36, 36);
    [self.checkbox setFrame:checkboxRect];  
    [self.checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateNormal];
    [self.checkbox setImage:[UIImage imageNamed:@"selected@2x.png"] forState:UIControlStateSelected];
    [self.checkbox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside];
    self.accessoryView = self.checkbox;
    array = [[NSMutableArray alloc]init];

}
return self;

}

-(void)checkboxClicked:(UIButton *)sender{
sender.selected = !sender.selected;
UITableViewCell *cell = (UITableViewCell *)sender.superview;
if(sender.selected){
    [array addObject:cell.textLabel.text];
}else{
    if([array containsObject:cell.textLabel.text]){
        [array removeObject:cell.textLabel.text];
        NSLog(@"it got removed");
    }
}
NSLog(@"%@",array);
}


-(void)dealloc{
[super dealloc];
}

编辑

-(void)checkboxClicked:(UIButton *)sender{
sender.selected = !sender.selected;
UITableViewCell *cell = (AddressBookCell *)sender.superview;
if(sender.selected){
    [abController.savedPeople addObject:cell.textLabel.text];
}else{
    if([abController.savedPeople containsObject:cell]){
        [abController.savedPeople removeObject:cell];
    }
}

}
4

2 回答 2

1

NSMutableArray被定义为表格单元格的一部分,这意味着每个单元格都有自己的数组,这就是为什么您在这个数组中永远不会有多个项目的原因。您需要将此数组声明为您的成员UITableView

于 2012-04-28T01:13:00.913 回答
0

似乎您的应用程序每次都显示整个列表,然后使用选择执行任务。那正确吗?您选择/取消选择人员,然后将其存储并发送文本?那么你想保存之前的选择以供下次用户拉起联系人选择时使用吗?

在我看来,您应该使用 anNSMutableSet而不是数组来完成此任务。似乎顺序并不重要,而 Set 会更合适。我会为集合声明一个属性@property (nonatomic, retain) NSMutableSet *contactList;,然后@synthesize contactList;

然后,当您的用户点击“完成”或他们做出选择时点击的任何内容时,您将选定的选项存储在 NSSet 中。这个 NSSet 被复制到你的 NSMutableSet 中[self.contactList setSet:myNonMutableSet];。然后每次拉出列表时,您只需通过调用self.contactList最后一个状态来检查上次选择的内容。

于 2012-04-28T01:49:11.710 回答