2012-04-29 3 views
13

Я пытаюсь изменить поведение клеток к: 1) Когда сотовый резьбовыми Марк Клетка как в комплекте с флажком 2) Когда кнопка раскрытия Аксессуар Деталь сливают, выполнить Segue. 3) В Tableview: didSelectRowAtIndexPath: у меня есть:в IOS приложение, почему prepareForSegue происходит до didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    AWDelivery *delivery = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    [delivery toggleDelivered: delivery]; 
    [self configureCheckmarkForCell:cell withDelivery:delivery]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
    if (debugging) NSLog(@"[%s] [%d]", __PRETTY_FUNCTION__, __LINE__); 
} 

deselectRowAtIndexPath должен обойти SEGUE, но это не так.

NSLogs: а) в 2012-04-29 18: 50: 00,848 доставки [3148: fb03] [- [DeliveryTVC prepareForSegue: Отправитель:]] [168] б) по 2012-04-29 18: 50: 01.245 Доставка [3148: fb03] [- [DeliveryTVC tableView: didSelectRowAtIndexPath:]] [93]

Обратите внимание, что 'didSelect' встречается после 'prepareForSegue'.

Любые советы были бы наиболее ценными.

+0

Можете ли вы поделиться своим кодом. У меня такая же проблема. Благодарю. – applefreak

+0

Очень случайный, но из вашего примера кода я узнал о макросах '__PRETTY_FUNCTION__' и' __LINE__'. Благодаря! – Guven

ответ

14

У вас есть ваша деталь segue, прикрепленная к ячейке просмотра таблицы? Вместо этого попробуйте перетащить его между двумя контроллерами представления (та, которая содержит таблицу и ту, где вы хотите, чтобы она была).

Затем выполнить это вручную ([self performSegueWithIdentifier:@"MySegue"];) когда tableView:accessoryButtonTappedForRowWithIndexPath:.

+1

Право на деньги !!!!!!! Этот маленький факт должен быть более выраженным. – JJW

+0

Можете ли вы добавить код, чтобы выполнить segue вручную, пожалуйста! У меня такая же проблема, когда я хочу передать информацию о ячейке в контроллер следующего вида. Вы имели в виду выполнение представления модального органа управления представлением вручную или метода prepareforsegue? Благодарю. – applefreak

+1

Конечно, независимо от того, что вам нужно, чтобы контролировать контроллер, скажите: [self performSegueWithIdentifier: @ "MySegue"]; эта строка должна соответствовать идентификатору, который вы настроили для сеанса в IB. Дайте мне знать, если вам нужна дополнительная информация. – danh

6

Если вам нужно получить текущий выбор таблицы в файле prepareForSegue, вы можете получить его, обратившись к таблице tableView ivar UITableViewController;

[self tableView] indexPathForSelectedRow] 
+0

Нажатие кнопки «Аксессуар» не выбирает ячейку, поэтому indexpath.row не соответствует правильной ячейке для подключенного аксессуара. – swampf0etus

1
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"ClaimDetailsSeque"]) 
    { 
     DLog(@"destinationViewController %@",[[segue destinationViewController] topViewController]); 
     //This syntax is needed when the seque is going through a Navagation Controller 
     ClaimDetailsFormViewController* vc = (ClaimDetailsFormViewController*)[[segue destinationViewController] topViewController]; 

     //This the the way to get the object from the selected row via the FetchedResultsController 
     //this is needed because prepareForSegue is called before didSelectRowAtIndexPath 
     NSIndexPath *selectedIndexPath = [self->claimTableView indexPathForSelectedRow]; 
     ClaimHistory *object = [[self claimHistoryFetchedResultsController] objectAtIndexPath:selectedIndexPath]; 

     MyClaimHistorySM *myCH = [MyClaimHistorySM new]; 

     myCH.policyNumber = object.policyNumber; 
     myCH.policyStatus = object.policyStatus; 
     myCH.claimNumber = object.claimNumber; 
     myCH.insuredName = object.insuredName; 
     myCH.lossDescription = object.lossDescription; 
     myCH.dateOfLoss = object.dateOfLoss; 
     myCH.incidentCloseDt = object.incidentCloseDt; 

     vc.claimHistorySM = myCH; 

    } 

} 

Seque on Storyboard

+0

Сег был создан в IB, выбрав ячейку «Просмотр таблицы» и перетащив «Коннектор выбора триггерных сег» в контроллер навигации. –

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