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

YourNSMutableArrayはテーブル セルの一部として定義されます。つまり、各セルには独自の配列があるため、この配列に複数の項目が含まれることはありません。代わりに、この配列をあなたのメンバーとして宣言する必要がありますUITableView

于 2012-04-28T01:13:00.913 に答える
0

あなたのアプリは毎回リスト全体を表示し、選択したタスクを実行しているようです。そうですか?人を選択/選択解除して保存し、テキストを送信しますか? 次に、ユーザーが連絡先の選択をプルアップしたときに、前の選択を保存しますか?

私の意見では、NSMutableSetこのタスクには配列ではなく を使用する必要があります。順序は重要ではないようで、 Set の方が適切です。@property (nonatomic, retain) NSMutableSet *contactList;セットのプロパティを次のように宣言します@synthesize contactList;

次に、ユーザーが「完了」または選択を行ったときにヒットしたものを押すと、選択したオプションが NSSet に保存されます。この NSSet は、 を使用して NSMutableSet にコピーされます[self.contactList setSet:myNonMutableSet];。次に、リストをプルアップするたびself.contactListに、最後の状態を呼び出して、前回選択されたものを確認します。

于 2012-04-28T01:49:11.710 に答える