2012-09-01 11 views
9

現在、2つのView Controllerを持つアプリケーションがあります。 1つは、ダイナミックセルを持つ埋め込みテーブルビューを持つビューコントローラです。 2番目は静的セルを持つテーブルビューコントローラです。動的テーブルのセルの1つから静的テーブルビューコントローラ(プッシュまたはモーダルスタイルの設定を使用)にセグを追加すると、セグが期待どおりに機能することがわかります。静的セルへのポップオーバーUITableViewによってコンパイルエラーが発生する

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

は、他の誰がこの問題に遭遇したのか、誰もがこのエラーメッセージが意味するかもしれないものを知っているん:私はポップオーバーにスタイルを変更するときしかし、私は以下のコンパイルエラーが出ますか?静的テーブルビューコントローラがポップオーバーでサポートされていない限り、コンパイル時にこれが起こっているのは奇妙です。

答えて

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

ただ、それ以外の場合は、すぐに配置されます、あなたはあなたのコントローラであなたのポップオーバーへの参照を持っていることを確認してください - いくつかの他の原因面白い例外。

+0

ストーリーボード(IB)でこれが起こることを好む限り、これは私のための治療になりました、ありがとう! – Joe

+0

非常に便利な投稿です!ありがとう – Rahul

+0

Upvoted非常に便利ですが、もはやiOS 10で有効ではありません - 関連するiOS 10コードを別個の回答として追加しましたが、受け入れられた回答、@ lehn0058に組み込みたい場合は、私の答えを削除します。 – Grimxn

2

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

+0

ポップオーバーのアンカーポイントはダイナミックセルの1つです。そのセルをタップすると、ポップオーバーにスタティックセルテーブルが表示されます。 – lehn0058

+0

私は、メインビューにボタンを追加し、アンカーとしてコンパイルエラーを取り除くが、私のポップオーバーは、テーブル内の正しいセルを指していないことを確認します。ボタンをセルに移動すると、同じコンパイルエラーが再度発生します。 – lehn0058

+0

この時点では、静的なテーブルビューセルにポップオーバーをアンカーできません。 –

0

@ 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: {}) 
} 
関連する問題