0

UISplitViewControllerマスター/詳細アプリに使用しています。マスター コントローラーは、選択されたときに詳細ビュー コントローラーを置き換えるさまざまなセルを含むテーブル ビューを表示します。セルが選択されている場合、対応する置換セグエは起動しませ

下の画像でわかるように、「Province Name」というラベルの付いたテーブル ビュー セルに配線された置換セグエがあります。

セグエ置換付きのマスター コントローラ テーブルビュー セル ここに画像の説明を入力

tableView:didSelectRowAtIndexPath:メソッドが呼び出され、プログラムでセグエを生成できますが、これperformSegueWithIdentifier:sender:を行う必要はありません! 私は問題なくテーブルビューセルからプッシュセグエを頻繁に使用しています。

興味深いことに、replace segue を に配線すると、UIBarButtonItem問題なく動作します (つまり、プログラムでセグエを実行する必要はありませ)。この問題は、テーブル ビュー セルに配線されたセグエを置き換える場合に特に発生します。

これはバグですか、それともここで見落としているものがありますか?

4

2 に答える 2

0

セグエ作成時に「セレクションセグエ」ではなく「アクセサリーアクション」を選択していませんか?

于 2013-03-28T13:16:38.660 に答える
0

これでしばらく作業した後、テーブル ビュー セルに対してセグエの置換が自動化されない理由についての手がかりが得られたと思います。ほとんどの場合、現在の詳細ビュー コントローラーは適切な種類のものであり、その「詳細項目」を変更したいだけです。別の種類の詳細コントローラーが必要な場合にのみ、(その場合にのみ) セグエを実行して現在の詳細ビュー コントローラーを置き換えます。したがって、置換セグエを (テーブル セルではなく) マスター ビュー コントローラーにリンクし、新しいコントローラーが本当に必要な場合にのみセグエを実行する次のロジックを使用します。

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

    if (indexPath.section == 0) {  // Canadian Province
        if ([self.detailViewController isKindOfClass:[ProvinceDetailViewController class]]) {
            self.detailViewController.detailItem = 
                          [appDelegate.provincesDictionary objectForKey:place];
            self.detailViewController.title = place;
        } else {
            [self performSegueWithIdentifier:@"ProvinceSegue" sender:self];
        }
    }

    // ...
}

PS分割ビューコントローラーにセグエ置換を使用している場合は、分割ビューデリゲートが詳細ビューコントローラーではないことを確認してください(これは、Xcodeテンプレートが物事を配置する方法です)。関連するデリゲート メソッドが呼び出されたときに通知を送信するスタンドアロンのデリゲート オブジェクトを作成します。これはかなりうまくいくようです。

于 2013-03-28T18:42:07.833 に答える