9

私は非常に単純なことをしようとしています: セグエを設定して、テーブル内のセルをクリックすると別のビュー コントローラーに移動するようにします。この問題は、これらのセルが含まれている TableView が (TableViewController ではなく) 通常の ViewController に埋め込まれており、この ViewController の 2 つのサブビューの 1 つであることが原因であると私は信じています。

私が知る限り、私はすべてを正しく設定しました: ViewController を Navigation Contoller の 2 つのサブビューに埋め込み、それを DataSource に設定し、TableView のデリゲートを作成し、TableViewCell から私へのプッシュ セグエを作成しました。ストーリーボードの 2 番目のビュー コントローラー。ただし、アプリが実行され、ユーザーがテーブル内の行をクリックすると、行が選択されるだけで、セグエはまったく起動しません (私はそれをデバッグしましたが、prepareForSegue 関数は呼び出されていません)。

私がここに欠けているものはありますか?または、TableView が View Controller の唯一のビューではない場合、これは何らかの理由で不可能ですか?

4

6 に答える 6

5

最近、セルのアクセサリ ビューからセグエを配線し、後でセグエを削除して、新しいセグエをセルに直接配線しようとしても機能しないことがわかりました(Xcode 4.6.2 を使用) - Xcode はセグエを接続し続けますアクセサリー ビューに (存在しない場合でも)! 私がそれを修正した方法は、IBでセルを選択し、接続インスペクタを使用して(1)元の「アクセサリアクション」セグエを削除し、(2)下の画像の塗りつぶされた円からドラッグして「選択」セグエを直接配線することです適切な宛先View Controllerに。

ここに画像の説明を入力

于 2013-05-22T05:35:26.170 に答える
4

これは役立つ場合と役に立たない場合がありますが、2つの異なるセルタイプを定義し、didSelectRowAtIndexPath実装を提供したため、この問題が発生しました。[self performSegueWithIdentifier:@"Whatever" sender:self]の一部として追加する必要がdidSelectRowAtIndexPathあり、問題は解決しました。

少なくとも行の選択を検出できる場合は、この方法を利用できる可能性があります。

于 2012-09-17T00:29:02.887 に答える
4

たとえば、セルのレンダリングをカスタマイズした場合:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

次に、ストーリー内のプロトタイプ セルに指定されているのと同じセル識別子を使用していることを確認します。

したがって、この場合、セグエを接続したセルの「識別子」を「セル」に設定する必要があります。

于 2013-04-07T20:06:00.113 に答える
2

Xcode で StoryBoard を作成している場合は、次の手順を実行します。

  1. UITableViewController を作成する
  2. プロトタイプ UITableViewCell を追加します
  3. セグエ ターゲットとなる UIViewController を作成します。
  4. プロトタイプ UITableViewCell を Control-クリックし、セグエ ターゲットにドラッグします。

それでおしまい。おそらく、UITableViewCell の特性を編集して、たとえば、UITableViewCell のサブクラスにしたいと思うでしょう。

于 2012-04-21T21:50:13.727 に答える
-1

同じ問題がありました。通常のビュー コントローラー内のプロトタイプ テーブル ビュー セルからセグエすると、アプリがクラッシュします。誰かが同じ問題を抱えている場合。

私の解決策:

プッシュ セグエを使用している場合は、テーブル ビューを含む最初のビュー コントローラーがナビゲーション コントローラーに埋め込まれていることを確認してください。そうしないと、「プッシュ セグエ」が機能しません。また、Navigation Controller ではなく、宛先の View Controller にセグエを向けてください。

前述のように、「セグエ識別子」が正しいことを確認してください。

"didSelectRowAtIndexPath" で "[self performSegueWithIdentifier:@"Your_destination_View_Controller" sender:self]; を呼び出します。

于 2014-04-07T09:18:36.787 に答える