Создать новую таблицу из строк, отмеченных в существующей таблице - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть таблица предметов с кнопкой раскрытия галочки, и я хочу создать вторую таблицу, основываясь на том, какие из них проверены. Я знаю, что должен использовать метод tableView: accessoryButtonTappedForRowWithIndexPath , но я понятия не имею, как его реализовать.

Допустим, это мой код, где мне ввести метод ButtonTapped и как он реализован?

@implementation RootViewController

@synthesize detailViewController;


#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    [self createFlowerData];
    [super viewDidLoad];
}

/*
- (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];
}
*/

// Ensure that the view controller supports rotation and that the split view can therefore show in both portrait and landscape.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}


#pragma mark -
#pragma mark Size for popover
// The size the view should be when presented in a popover.
- (CGSize)contentSizeForViewInPopoverView {
    return CGSizeMake(320.0, 600.0);
}


#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
    // Return the number of sections.
    return [flowerSections count];
}


- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    return [[flowerData objectAtIndex:section] count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"CellIdentifier";

    // Dequeue or create a cell of the appropriate type.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }

    // Configure the cell.
    [[cell textLabel] setText:[[[flowerData objectAtIndex:indexPath.section] objectAtIndex: indexPath.row] objectForKey:@"name"]];
    [[cell imageView] setImage:[UIImage imageNamed:[[[flowerData objectAtIndex:indexPath.section] objectAtIndex: indexPath.row] objectForKey:@"picture"]]];
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    return [flowerSections objectAtIndex:section];
}


- (void)createFlowerData {

    NSMutableArray *redFlowers;
    NSMutableArray *blueFlowers;

    flowerSections=[[NSMutableArray alloc] initWithObjects:
                    @"Red Flowers",@"Blue Flowers",nil];

    redFlowers=[[NSMutableArray alloc] init];
    blueFlowers=[[NSMutableArray alloc] init];

    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Poppy",@"name",
                           @"poppy.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Poppy",@"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Tulip",@"name",
                           @"tulip.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Tulip",@"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Gerbera",@"name",
                           @"gerbera.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Gerbera",@"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Peony",@"name",
                           @"peony.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Peony",@"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Rose",@"name",
                           @"rose.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Rose",@"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Hollyhock",@"name",
                           @"hollyhock.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Hollyhock",
                           @"url",nil]];
    [redFlowers addObject:[[NSMutableDictionary alloc]
                           initWithObjectsAndKeys:@"Straw Flower",@"name",
                           @"strawflower.png",@"picture",
                           @"http://en.wikipedia.org/wiki/Strawflower",
                           @"url",nil]];

    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Hyacinth",@"name",
                            @"hyacinth.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Hyacinth_(flower)",
                            @"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Hydrangea",@"name",
                            @"hydrangea.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Hydrangea",
                            @"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Sea Holly",@"name",
                            @"seaholly.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Sea_holly",
                            @"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Grape Hyacinth",@"name",
                            @"grapehyacinth.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Grape_hyacinth",
                            @"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Phlox",@"name",
                            @"phlox.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Phlox",@"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Pin Cushion Flower",@"name",
                            @"pincushionflower.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Scabious",
                            @"url",nil]];
    [blueFlowers addObject:[[NSMutableDictionary alloc]
                            initWithObjectsAndKeys:@"Iris",@"name",
                            @"iris.png",@"picture",
                            @"http://en.wikipedia.org/wiki/Iris_(plant)",
                            @"url",nil]];

    flowerData=[[NSMutableArray alloc] initWithObjects:
                redFlowers,blueFlowers,nil];

    [redFlowers release];
    [blueFlowers release]; 
}


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/


/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/


/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/


/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {
    return 75.0;
}


#pragma mark -
#pragma mark Table view delegate

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

    /*
     When a row is selected, set the detail view controller's detail item to the item associated with the selected row.
     */
    detailViewController.detailItem = 
         [[flowerData objectAtIndex:indexPath.section] 
          objectAtIndex: indexPath.row];

}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
    [flowerData release];
    [flowerSections release];
    [detailViewController release];
    [super dealloc];
}

В конечном итоге я хочу, чтобы это было что-то похожее на это изображение, где отмеченные справа элементы отображаются в виде новой таблицы слева:

enter image description here

1 Ответ

0 голосов
/ 31 декабря 2011

Я не пробовал, но это должно помочь вам решить вашу проблему:

  1. Создайте NSMutableArray для хранения выбранных вами строк: selectedRowsArray
  2. Реализация tableview:didSelectRowAtIndexPath: Метод делегата:
  3. Внутри этого метода получите ссылку на выбранную ячейку с помощью UITableViewCell *cell = [self.tableview cellForRowAtIndexPath:indexPath].
  4. Проверьте, есть ли в ячейке галочка, если нет, добавьте галочку и добавьте интересующий вас объект в изменяемый массив ...

Ex:

if (cell.accessoryType != UITableViewCellAccessoryCheckmark)
{
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [selectedRowsArray addObject:THE_OBJECT];
} else {
    cell.accessoryType = UITableViewCellAccessoryNone;
    [selectedRowsArray removeObject:THE_OBJECT];
}

Теперь вы можете использовать изменяемый массив для заполнения данных другого табличного представления. Не забудьте вызывать reloadData для таблицы каждый раз, когда вы добавляете или удаляете объект из массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...