我有一个人员联系人列表,他们名字旁边有一个复选框。
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];
}
}
}
答案 0 :(得分:1)
您的NSMutableArray
被定义为表格单元格的一部分,这意味着每个单元格都有自己的数组,这就是为什么在这个数组中永远不会有多个项目。您需要将此数组声明为UITableView
的成员。
答案 1 :(得分:0)
您的应用似乎每次都会显示整个列表,然后执行选择任务。是对的吗?您选择/取消选择人员然后存储它们并发送文本?那么您希望在下次用户提取联系人选择时保存以前的选择吗?
在我看来,您应该使用NSMutableSet
而不是数组来完成此任务。似乎订单不重要,而Set更合适。我会声明像@property (nonatomic, retain) NSMutableSet *contactList;
然后@synthesize contactList;
然后,当您的用户点击“完成”或他们做出选择时点击的内容时,您将所选选项存储在NSSet中。使用[self.contactList setSet:myNonMutableSet];
将此NSSet复制到NSMutableSet。然后,每当您拉出列表时,只需通过调用self.contactList
获取最后一个状态来检查上次选择的内容。