Skip to content

UITableViewをチェックボックスにする全然すごくない方法

2011年7月28日

もっと簡単な方法書きました

===============================

UITableViewのセル左側にチェックボックスをつけたかったから、

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 3;
}

でチェックボックスを表示したはいいものの、これは[self.tavleview reloadData]をすると、チェックボックスの表示が全部リセットされてしまうという事が使ってるうちにわかった。

これだと「続きを読む」を押したときにチェックが外れたりして都合が悪かったので、すごく単純な感じにチェックボックスとして活用できるものを作った。
簡単に言うと、データにただチェックの情報を付加しただけです。

検索するとみんな難しい作り方しててわかんなかった。

.h

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController {

    @private
    UIImage *nocheckImage_;
    UIImage *checkedImage_;
    NSArray *initialArray;
    NSArray *addArray;
    NSMutableArray *dataSource_;

}

@end

.m

#import "RootViewController.h"

@implementation RootViewController

- (void)dealloc
{
    [initialArray release];
    [addArray release];
    [super dealloc];
}

- (void)tableFooterViewMake{
    UIButton *addButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    addButton.frame = CGRectMake(0, 0, 200, 50);
    [addButton setTitle:@"add" forState:UIControlStateNormal];
    [addButton addTarget:self action:@selector(addButtonPush) forControlEvents:UIControlEventTouchUpInside];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    [view addSubview:addButton];

    self.tableView.tableFooterView = view;
    [view release];
}

- (void)navigatinBarItemMake{
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"WhichIsCheckedCell?" style:101 target:self action:@selector(rightButtonPush)];
    self.navigationItem.rightBarButtonItem = rightButton;
}

- (void)addButtonPush{
    NSLog(@"push");

    for (int i = 0; i < [addArray count]; ++i) {
        NSMutableDictionary *tmpDic = [[NSMutableDictionary alloc] init];
        [tmpDic setObject:[addArray objectAtIndex:i] forKey:@"data"];
        [tmpDic setObject:@"NO" forKey:@"checked"];
        [dataSource_ addObject:tmpDic];
        [tmpDic release];
    }
    NSLog(@"are");
    [self.tableView reloadData];

}

- (void)rightButtonPush{
    NSLog(@"doya");
    NSString *resultString = [[NSString alloc] init];
    for (int i = 0; i < [dataSource_ count]; ++i) {
        if ([[[dataSource_ objectAtIndex:i] objectForKey:@"checked"] isEqualToString:@"YES"]) {
            resultString = [resultString stringByAppendingFormat:@"%@,",[[dataSource_ objectAtIndex:i] objectForKey:@"data"]];
        }
    }
    NSLog(@"resultString : %@",resultString);
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self tableFooterViewMake];
    [self navigatinBarItemMake];
    nocheckImage_ = [UIImage imageNamed:@"136.gif"];
    checkedImage_ = [UIImage imageNamed:@"127.gif"];

    initialArray = [[NSArray alloc] initWithObjects:@"1-1",@"1-2",@"1-3",@"1-4",@"1-5",@"1-6",@"1-7",@"1-8",@"1-9",@"1-10", nil];
    addArray = [[NSArray alloc] initWithObjects:@"2-1",@"2-2",@"2-3",@"2-4",@"2-5",@"2-6",@"2-7",@"2-8",@"2-9",@"2-10", nil];

    dataSource_ = [[NSMutableArray alloc] init];

    for (int i = 0; i < [initialArray count]; ++i) {
        NSMutableDictionary *tmpDic = [[NSMutableDictionary alloc] init];
        [tmpDic setObject:[initialArray objectAtIndex:i] forKey:@"data"];
        [tmpDic setObject:@"NO" forKey:@"checked"];
        [dataSource_ addObject:tmpDic];
        [tmpDic release];
    }
    NSLog(@"dataSource : %@",dataSource_);
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
	[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
	[super viewDidDisappear:animated];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [dataSource_ count];
}

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    cell.textLabel.text = [[dataSource_ objectAtIndex:indexPath.row] objectForKey:@"data"];

    if ([[[dataSource_ objectAtIndex:indexPath.row] objectForKey:@"checked"] isEqualToString:@"NO"]) {
        cell.imageView.image = nocheckImage_;
    }else{
        cell.imageView.image = checkedImage_;
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if ([[[dataSource_ objectAtIndex:indexPath.row] objectForKey:@"checked"] isEqualToString:@"YES"]) {
        [[dataSource_ objectAtIndex:indexPath.row] setObject:@"NO" forKey:@"checked"];
        [self.tableView reloadData];
    }else{
        [[dataSource_ objectAtIndex:indexPath.row] setObject:@"YES" forKey:@"checked"];
        [self.tableView reloadData];
    }
}

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

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

@end

これで問題なく行けるぞー。やったー。

広告

From → iPhone開発

コメントする

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。