5

カスタム分割ビューを使用して Ipad アプリを開発しています。マスター ビューには tableViewController があります。ナビゲーション バーの追加ボタンを使用して、この項目に項目を追加します。このボタンは、データを入力するためのいくつかのセルを含む他の tableViewController へのポップオーバー セグエでリンクされています (私はストーリーボードで動作します)。ボタン「保存」は、ポップオーバー ビューを閉じ、masterView のリストに項目を追加します。次にやりたいことは、マスター ビューのプロトタイプ セルを他のビューにリンクして、ユーザーが選択したアイテムを編集できるようにすることです。このビューをポップオーバー セグエ (追加ボタンと同じように) にリンクしたいのですが、どこに問題がありますか: xcode から赤い問題が発生しました: 接続をコンパイルできませんでした: => anchorView => > .

これは正常に動作する私のコードのサンプルです。編集のためにセルをタップするときも、まったく同じことをしたいと思います。

masterSplitView テーブル

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"assetCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    // Configure the cell...
    AssetModel *myAssetModel = [self.arrayAsset objectAtIndex:indexPath.row];
    cell.textLabel.text = myAssetModel.name;
   // cell.textLabel.text = @"test";

    return cell;

}

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    if([segue.identifier isEqualToString:@"addAssetSegue"]){
        AddAssetTVC *addAssetTVC = segue.destinationViewController;
        addAssetTVC.delegate = self;

        UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
        [addAssetTVC setPopoverController:[popoverSegue popoverController]];

    }

}

- (void) theSaveButtonOnTheAddAssetTVCWasTapped:(AddAssetTVC *)controller{
    [controller.navigationController popViewControllerAnimated:YES];
    [self reloadCache];
    [self.tableView reloadData];
    [self viewDidLoad];
}

そして、追加ビューの保存方法:

- (IBAction)save:(id)sender{
    [popoverController dismissPopoverAnimated:YES];
    NSLog(@"Telling the ADDASSET Delegate that Save was tapped on the AddAssetTVC");

    {...unrevelant coredata methods}

    [self.delegate theSaveButtonOnTheAddAssetTVCWasTapped:self];
}

読んでくれてありがとう

アレクサンドル

4

3 に答える 3

4

私も同じ問題を抱えていました。カスタムセグエを使用して解決しました。クラスのprepareメソッド:

  1. カスタムコントローラーまたはUITableViewController
  2. 宛先コントローラーをつかむ
  3. UIPopoverController宛先コントローラーで初期化されたを作成します
  4. 現在選択されている行のセルを取得する
  5. ポップオーバーを宛先コントローラーのプロパティとして保存します (そうすれば、ポップオーバーを閉じることができ、割り当てが解除されることはありません)
  6. セルを使用してポップオーバーを表示しframeますCGRect
  7. それ以外の場合は最大サイズになるため、ポップオーバーのサイズを設定します

サンプルコードは次のとおりです。

UITableViewController *tvc = (UITableViewController *)self.sourceViewController;
DetailsViewController *details = (DetailsViewController *)self.destinationViewController;    
UITableViewCell *cell = [tvc.tableView cellForRowAtIndexPath:[tvc.tableView indexPathForSelectedRow]];

UIPopoverController *pop = [[UIPopoverController alloc] initWithContentViewController:details];

details.popoverController = pop;

CGSize size = CGSizeMake(640, 460);
pop.popoverContentSize = size;


[pop presentPopoverFromRect:cell.frame
                     inView:tvc.tableView 
   permittedArrowDirections:UIPopoverArrowDirectionUp | UIPopoverArrowDirectionDown 
                   animated:YES];
于 2012-06-11T19:39:30.500 に答える
0

最小限のコーディングでこれを行うことができました。これを試して:

  1. ツールバーまたはナビゲーション バーにボタンを追加しました。これは、ポップオーバーのアンカーとなるダミー ボタンです。ボタンを無効にします ([有効にする] をオフにします)。複数のテーブルビューに同じボタンを使用します。ボタンでオーガナイザーのアイコン画像を使用してドリルダウンをシミュレートするか、didSelectRowAtIndex メソッドでそれぞれのカスタム画像またはタイトルを設定してから performSegueWithIdentifier を呼び出すことができます...後で説明します...
  2. 次に、ボタンをポップオーバー ビューに接続します。明らかにタイプをポップオーバーに設定します
  3. セグエの矢印をタップして、セグエに名前を付けます。この例では「SegToDetail」です。
  4. テーブルビューを使用したマスター/親コードで、メソッド didSelectRowAtIndex... を追加します。そのメソッドでは、ボタンの外観を設定できます。最も重要なことは、[self performSegueWithIdentifier:@"SegToDetail"...そしてそれだけです...
  5. これで、セグエ遷移と同様に、prepareForSegue メソッドで任意の情報を渡すことができます。
于 2012-07-08T03:32:27.303 に答える
0

@Richの回答に基づいていますがPopoverPresentationController、Swiftを使用しています。

override func perform() {
    let svc = self.sourceViewController as! yourSourceViewController
    let pvc = self.destinationViewController as! yourPresentedViewController

    // Present the view controller using the popover style
    pvc.modalPresentationStyle = UIModalPresentationStyle.Popover
    svc.presentViewController(pvc, animated: true, completion: nil)

    // Get the popover presentation controller and configure it
    let cell = svc.tableView.cellForRowAtIndexPath(svc.tableView.indexPathForSelectedRow!)
    let presentationController = pvc.popoverPresentationController
    presentationController!.permittedArrowDirections = .Any
    presentationController!.sourceView = svc.tableView
    presentationController!.sourceRect = cell!.frame
}
于 2016-03-08T03:30:31.137 に答える