didSelectedRowAtIndexPath - prepareForSegue - Раскадровка - PullRequest
2 голосов
/ 13 марта 2012

Я пытаюсь отправить данные в мой DetailViewController в соответствии со строкой, выбранной в моем TableView.Мой проект сделан с помощью StoryBoard.

Мой TableViewCell хорошо связан с моим UIView в моей MainStoryBoard, все нормально, ожидайте, что я не знаю, как отправить информацию выбранной строки в мой DetailView

Вот что у меня есть:

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

{
    NSUInteger section = [indexPath section];
    NSUInteger row = [indexPath row];
    NSUInteger oldRow = [lastIndexPath row];
    NSString *key = [keys objectAtIndex:section];
    detailRow = [names objectForKey:key];
    static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];
    if (cell == nil)
    {
        CGRect cellFrame = C

GRectMake(0, 0, 300, 65);
        cell = [[UITableViewCell alloc] initWithFrame:cellFrame] ;
    }
    CGRect nameLabelRect = CGRectMake(200, 5, 200, 15);
    UILabel *nameLabel = [[UILabel alloc] initWithFrame:nameLabelRect];
    nameLabel.tag = kNameValueTag;
    [cell.contentView addSubview: nameLabel];

    UILabel *name  = (UILabel *)[cell.contentView viewWithTag:kNameValueTag];
    name.text = [[detailRow objectAtIndex:row] valueForKey:@"name"];

    cell.imageView.image = [UIImage imageNamed:[[detailRow objectAtIndex:row] valueForKey:@"image"]];

    cell.accessoryType = (row == oldRow && lastIndexPath != nil) ?
        UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;

    return cell;
}



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

    [self performSegueWithIdentifier:@"DetailGrandComptes" sender:self];
}



    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {

    if ([[segue identifier] isEqualToString:@"DetailGrandComptes"]) 
    {

      // HERE IS WHERE THE CODE SHOULD BE I GUESS.... !! I HAVE TO DISPLAY AN UIIMAGEVIEW + UILABEL + UIIMAGEVIEW 

    }

}

Ответы [ 2 ]

9 голосов
/ 13 марта 2012

Когда вы вызываете "executeSegueWithIdentifier: sender:" вместо передачи self отправителю, передайте необходимую информацию позже (то есть, indexPath или объект вашей модели, представленный indexPath) Позже в prepareForSegue (внутри вашего if) вы можете привести параметр sender к объекту, который вы передали ранее, и вы можете получить контроллер представления назначения с помощью [segue destinationViewController]; На этом этапе вы можете установить в вашем целевом контроллере некоторые свойства (например, изображения и т. Д.) ..

Итак ...

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"DetailGrandComptes" sender:indexPath];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

if ([[segue identifier] isEqualToString:@"DetailGrandComptes"]) 
{
   MyViewController *destination = [segue destinationViewController];
   NSIndexPath * indexPath = (NSIndexPath*)sender;
   destination.imageName = [[detailRow objectAtIndex:indexPath.row] valueForKey:@"image"]
  destination.nameString = ....
}

РЕДАКТИРОВАТЬ: Ваш класс "DetailGrandComptes" должен иметь свойства или ivav вам нужно! Итак ... если вам нужны метка и изображение, ваш класс должен выглядеть следующим образом:

@interface DetailGrandComptes : UIViewController

@property (strong, nonatomic) NSString *imageName;
@property (strong, nonatomic) NSString *nameString;

@end

//in you .m
@interface DetailGrandComptes()
@property (weak, nonatomic) IBOutlet UIImageView *image;
@property (weak, nonatomic) IBOutlet UILabel *name;
@end

@implementation DetailGrandComptes

- (void)viewWillAppear
{
    [super viewWillAppear];
    name.text = nameString;
    image.image = [UIImage imageNamed:imageName];
}

@end
0 голосов
/ 13 апреля 2013

Кроме того, если контроллером вида назначения является контроллер вида навигации. должно быть:

MyViewController *destination = [[segue destinationViewController] topViewController];
...