通过prepareForSegue传递属性

时间:2015-07-23 00:38:55

标签: ios objective-c

如何通过prepareForSegue为自定义单元格传递属性(此属性来自实体)?

因此,我还怀疑是否根据用户点击的行将此属性作为过滤器发送?例如,在第一个表中,用户点击“Pizzeria”,然后第二个屏幕显示另一个表,其中只包含“Pizzeria”类别的企业。

到目前为止,这是我的代码

#pragma mark - Ações da tabela
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //O número de linhas da tabela será o mesmo número de objetos na lista de categorias
    return listaDeCategorias.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    CelulaEstabelecimentoTableViewCell *celula = [tableView dequeueReusableCellWithIdentifier:IdentificadorCelula
                                                                                 forIndexPath:indexPath];

    if(!celula) {
        celula = [[CelulaEstabelecimentoTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                           reuseIdentifier:IdentificadorCelula];
    }

    categoria = [NSEntityDescription insertNewObjectForEntityForName:@"Categoria" inManagedObjectContext:contexto];
    categoria.nome = [listaDeCategorias objectAtIndex:indexPath.row];

    [celula.textLabel setText:categoria.nome];
    [celula setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    return celula;
}

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    categoria.nome = [listaDeCategorias objectAtIndex:indexPath.row];
    //NSString *categoriaClicada = [listaDeCategorias objectAtIndex:indexPath.row];
    [self performSegueWithIdentifier:IdentificadorSegue sender:categoria.nome];
}

#pragma mark - Segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:IdentificadorSegue]) {
        UINavigationController *navigationController = [segue destinationViewController];
        EstabelecimentoViewController *destino = (EstabelecimentoViewController *)([navigationController viewControllers][0]);

    }
}

注意:prepareForSegue方法故意不完整,因为他们不知道如何从那里继续。

这里我希望自定义单元格填充过滤数据 enter image description here

映射: enter image description here

故事板: enter image description here

2 个答案:

答案 0 :(得分:0)

假设ViewController你也是segueing的是EstabelecimentoViewController,它有一个公共属性" nome",这就是你通过" nome"到EstabelecimentoViewController.nome:

#import 'EstabelecimentoViewController.h'
.
.
.
#pragma mark - Segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if([segue.identifier isEqualToString:IdentificadorSegue]) {
        EstabelecimentoViewController *establishmentVC = [segue destinationViewController];

        establishmentVC.nome = categoria.nome;
    }
}

答案 1 :(得分:0)

/* Try This...*/
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"mySegue"] && self.demoObject != nil) {
        // This line returns a value...
        NSLog(@"self.demoObject = %@", self.demoObject.itemDescription);
        // ...but it crashes here when it tries to set on the destinationViewController
        if ([[segue destinationViewController] isKindOfClass:[SecondViewController class]]) {
            SecondViewController *destinationViewController = (SecondViewController *)[segue destinationViewController];
            destinationViewController.selectedItemPhoto = self.demoObject.photo;
            destinationViewController.selectedItemTitle = self.demoObject.itemDescription;
        }
    }
}