2

TableViewController私は現在、4つのセルを持つUITableViewController(と呼ばれる)であるポップオーバーを持っています。セルの1つを選択したら、ポップオーバーを閉じ、同時にセルの選択に基づいて設定された変数を取得し、それをself.styleText.text = thePopoverCellVariable;他のView Controller(と呼ばれるOtherViewController)のラベルアウトレット(つまり)のテキストとして使用します。 。これどうやってするの?

現在、これは、外側をクリックしてポップオーバーを閉じた場合にのみ機能します。のコードTableViewController.mは次のとおりです。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ((OtherViewController *)self.presentingViewController).thePopoverCellVariable=theVariable;
}

そしてでOtherViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIStoryboardPopoverSegue *popoverSegue;
    popoverSegue = (UIStoryboardPopoverSegue *)segue;

    UIPopoverController *popoverController;
    popoverController = popoverSegue.popoverController;
    popoverController.delegate=self;
}

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
    thePopoverCellVariable = ((StyleViewController *)popoverController.contentViewController).theVariable;
    self.styleText.text=thePopoverCellVariable;
}
4

2 に答える 2

0

TableViewController

@property (weak, nonatomic) UIPopoverController *popoverController; // In header

@synthesize popoverController = _popoverController;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    self.theVariable = … // get the variable from the cell.

    [self.popoverController dismissPopoverAnimated:YES];
}

OtherViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIStoryboardPopoverSegue *popoverSegue;
    popoverSegue = (UIStoryboardPopoverSegue *)segue;

    UIPopoverController *popoverController;
    popoverController = popoverSegue.popoverController;
    popoverController.delegate=self;

    TableViewController *tableViewController = (TableViewController *)popoverSegue.destinationViewController;
    tableViewController.popoverController = popoverController;
}

以前の混乱で申し訳ありませんが、これはモーダルビューコントローラーのように機能すると思いました。


OK、これは最適ではないと思いますが、機能するはずです。


アップデート

-popoverControllerDidDismissPopover:popoverController.delegate = self設定していない場合は呼び出されませんOtherViewControllerデリゲートを参照)。これは、ストーリーボードまたはで行うことができます-prepareForSegue:sender:

于 2012-07-15T23:00:30.267 に答える
0

私はついにこれを理解しました。@Jeffery Thomasは正解の99%を持っています。他の1%は、この場合、ルートビューコントローラからポップオーバーを閉じる必要があることですOtherViewController。そこでpopoverController、ヘッダーファイルに変数を作成し、次のようにコードを実装しました

//OtherViewController.m
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIStoryboardPopoverSegue *popoverSegue;
    popoverSegue = (UIStoryboardPopoverSegue *)segue;
    popoverController = popoverSegue.popoverController;
    pCVisible = YES;
    [[segue destinationViewController] setDelegate:self];
}

- (void) setDataFromPopover {
    if (pCVisible) {
        [popoverController dismissPopoverAnimated:YES]; // THIS IS KEY! this is where the popover is dismissed, not in the popover itself
    }
}

と...

//TableViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //variable = whatever

    OtherViewController *initialView;
    initialView=(OtherViewController *)self.delegate;
    initialView.theLabel.text = variable;
    [initialView setDataFromPopover];
}
于 2012-08-30T01:44:50.077 に答える