2012-06-25 2 views
4

Как передать объект из раскрывающегося списка деталей в контроллер подробного представления? Есть ли какие-либо рекомендации или быстрые исправления для этого? В идеале я хочу создать метод, как это:Передача объекта из кнопки раскрытия подробностей segue

[self performSegueWithIdentifier:@"showDetail" sender:self passObject:object]; 

Причина заключается в том, что «готовится к Segue», кажется дозвонились только тогда, когда я нажимаю ячейку перед индикатором раскрытия деталей. Как создать метод, подобный приведенному выше, для создания эффектов подготовки ниже?

if ([[segue identifier] isEqualToString:@"showDetail"]) { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
    id object = [_objects objectAtIndex:indexPath.row]; 
    [[segue destinationViewController] setDetailItem:object]; 
} 

Я уже пытался создать подкласс UIStoryboardSegue как так, но столкнулись две проблемы.

@implementation masterToDetail 
-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender passObject:(id)object{ 
    [self.destinationViewController setDetailItem:object]; 
    [self performSegueWithIdentifier:identifier sender:sender]; 
} 

-(void)performSegueWithIdentifier:(NSString*)identifier sender:(id)sender{ 
//What code should go here? Issue one 
} 

-(void)perform{ 
    //Second issue, the compiler will crash and say I need to override perform. 
} 

ответ

4

Я исправил проблему, полностью отделив подкласс идеи segue. Я удалил пользовательский segue и сделал push segue (от tableviewcontrollre) до моего контроллера подробного представления. Затем я создал экземпляр переменной NSIndexPath* _ipath; и мой код выглядит следующим образом:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{ 
    _ipth = indexPath; 
    [self performSegueWithIdentifier:@"showDetail" sender:self]; 
} 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    NSLog(@"prepping"); 
    if ([[segue identifier] isEqualToString:@"showDetail"]) { 
     NSLog(@"in if"); 
     id object = [_objects objectAtIndex:_ipth.row]; 
     [[segue destinationViewController] setDetailItem:object]; 
    } 
} 

Это позволяет подготовиться к Segue сделать это работа для правильной ячейки.

+0

Я думаю, что это самый быстрый из всех, кого я когда-либо видел, кто спрашивал, а затем отвечал на их собственный вопрос. –

+0

Я был настроен исправить это и проводил довольно долгое время, прежде чем я решил спросить. xD – erran

+2

Вы всегда можете указать ячейку или indexPath в качестве отправителя. Тогда вам также не нужно создавать ivar. –

1
  1. открыта раскадровка

  2. выберите Master View Controller - Master

  3. выберите SEGUE из UITableViewCell в Detail View Controller - Деталь

  4. открытых атрибутов инспектор

  5. идентификатор - > masterToDetail написать

+0

Как это разрешить передачу ссылки на объект от мастера к контроллеру подробного представления? – Douglas

+0

@ Дуглас Это не так - вы делаете это в prepareForSegue: отправитель –

0

Вы можете просто щелкнуть правой кнопкой мыши на панели просмотра таблицы, а затем ctrl-drag из аксессуара.

Смежные вопросы