2012-09-01 12 views
9

Aktualnie mam aplikację z dwoma kontrolerami widoku. Pierwszym z nich jest kontroler widoku z osadzonym widokiem tabeli z komórkami dynamicznymi. Drugi to kontroler widoku tabeli z komórkami statycznymi. Jeśli dodaję segue z wybrania jednej z komórek tabeli dynamicznej do kontrolera statycznego widoku tabeli (używając ustawienia stylu Push lub Modal), widzę, że segue działa zgodnie z oczekiwaniami. Jednak, kiedy zmienić styl popover otrzymuję następujący błąd kompilacji:Popover przenosi się do komórki statycznej UITableView powoduje błąd kompilacji

Couldn't compile connection: <IBCocoaTouchOutletConnection:0x4004c75a0 <IBProxyObject: 0x400647960> => anchorView => <IBUITableViewCell: 0x400f58aa0>> 

Czy ktoś wpadł na ten problem, albo czy ktoś wie co ten komunikat o błędzie może oznaczać? Wydaje się dziwne, że dzieje się to podczas kompilacji, chyba że statyczny kontroler widoku tabeli nie jest obsługiwany w Popover ...

Odpowiedz

15

Wymyśliłem, jak to zrobić. Nie można go podłączyć z serii ujęć, ale można to zrobić programowo tak:

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

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" 
               bundle:nil]; 
    UITableViewController *detailController = [sb instantiateViewControllerWithIdentifier:@"TableSettingDetails"]; 

    self.popoverController = [[UIPopoverController alloc] initWithContentViewController:detailController]; 

    self.popoverController.popoverContentSize = CGSizeMake(320, 416); 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    [self.popoverController presentPopoverFromRect:cell.bounds inView:cell.contentView 
          permittedArrowDirections:UIPopoverArrowDirectionAny 
              animated:YES]; 
} 

Tylko upewnij się, że masz odniesienie do swojej popover w kontrolerze, w przeciwnym razie będzie się natychmiast usuwane - powodując jakieś inne ciekawe wyjątki.

+0

Tak bardzo, jak wolałbym to robić w scenorysie (IB), to sprawiło mi przyjemność, dzięki! – Joe

+0

Bardzo przydatny post! Dzięki – Rahul

+0

Rewizja jest bardzo przydatna, ale nie jest już ważna w systemie iOS 10 - dodałem odpowiedni kod systemu iOS 10 jako oddzielną odpowiedź, ale jeśli chcesz włączyć go do zaakceptowanej odpowiedzi, @ lehn0058, kontynuuj, a ja Skasuję moją odpowiedź. – Grimxn

2

Musisz wybrać punkt kontrolny dla tego Popover, który NIE jest komórką statyczną. Moja sugestia polega na ustawieniu niewidocznego zestawu UIButton (typ niestandardowy). Następnie wybierz Segment Popover i przeciągnij połączenie Anchor do tego przycisku.

+0

Punktem kontrolnym popover jest jedna z komórek dynamicznych. Stuknięcie w tę komórkę wywołuje popover ze statyczną tabelą komórek. – lehn0058

+0

Widzę, że dodanie przycisku do głównego widoku i ustawienie, że jako kotwica pozbywa się błędu kompilacji, ale mój popover nie wskazuje właściwej komórki w tabeli. Przeniesienie przycisku do komórki powoduje ponownie ten sam błąd kompilacji. – lehn0058

+0

W tej chwili nie można zakotwiczać popover w komórce statycznego widoku tabeli. –

0

Od prawidłowej i zaakceptowanej odpowiedzi na system iOS 10 nie działa już funkcja @ lehn0058. Oto jego rozwiązanie zaktualizowane na iOS 10 ...

override func tableView(_ tableView: UITableView, accessoryButtonTappedForRowWith indexPath: IndexPath) { 
    // *** Next line doesn't work with popover, only full screen detail 
    //self.performSegue(withIdentifier: "editRow", sender: self) 
    // Hence, do it by hand... 
    let sb = UIStoryboard(name: "Main", bundle: nil) 
    let detailVC: MyDetailViewController = sb.instantiateViewController(withIdentifier: "itemEditor") as! MyDetalViewController 
    detailVC.modalPresentationStyle = .popover 
    detailVC.popoverPresentationController?.sourceView = tableView.cellForRow(at: indexPath) 
    detailVC.detailItem = self.itemAtIndexPath(indexPath) 

    self.present(detailVC, animated: true, completion: {}) 
} 
Powiązane problemy