9

現在、2 つのビュー コントローラーを備えたアプリケーションがあります。1 つ目は、動的セルを持つテーブル ビューが埋め込まれたビュー コントローラーです。2 つ目は、静的セルを含むテーブル ビュー コントローラーです。動的テーブルのセルの 1 つを選択して静的テーブル ビュー コントローラーにセグエを追加すると (プッシュまたはモーダル スタイル設定を使用)、セグエが期待どおりに機能することがわかります。ただし、スタイルをポップオーバーに変更すると、次のコンパイル エラーが発生します。

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

他の誰かがこの問題に遭遇したことがありますか、またはこのエラー メッセージが何を意味するかを知っている人はいますか? ポップオーバーで静的テーブル ビュー コントローラーがサポートされていない場合を除き、これがコンパイル時に発生しているのは奇妙に思えます...

4

4 に答える 4

15

これを行う方法を理解しました。ストーリーボードから接続することはできませんが、次のようにプログラムで行うことができます:

- (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];
}

コントローラーにポップオーバーへの参照があることを確認してください。そうしないと、すぐに破棄され、他の興味深い例外が発生します。

于 2012-09-03T00:51:23.087 に答える
3

静的セルではないそのポップオーバーのアンカー ポイントを選択する必要があります。私の提案は、UIButton を非表示 (カスタム タイプ) に設定することです。次に、Popover Segue を選択し、アンカー接続をそのボタンにドラッグします。

于 2012-09-01T16:01:05.080 に答える
0

これはすでに回答されていることは知っていますが、セグエを使用してストーリーボードの流れを維持しながら、これに対する解決策がある場合に備えて参考にしてください。ここで確認でき ますか? ポップオーバー セグエを手動で (動的 UITableView セルから) 実行することは可能ですか?

于 2013-02-14T00:02:03.893 に答える
0

iOS 10 の時点で、@ lehn0058 の正しい受け入れられた回答は機能しなくなりました。これが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: {})
}
于 2017-03-27T12:10:29.270 に答える