2012-04-21 46 views
8

私は非常に簡単なことをしようとしています。テーブル内のセルをクリックすると別のView Controllerに移動するようにセグを設定します。この問題は、これらのセルがTableViewにあるという事実が(TableViewControllerとは対照的に)通常のViewControllerに埋め込まれていることに由来し、このViewControllerの2つのサブビューの1つです。テーブルビューセルエグが機能しない

私が言うことができる限り、すべてを正しく設定しました。NavControllerに2つのサブビューを持つViewControllerを組み込み、それをdataSourceに設定し、TableViewを委任し、プッシュセグを作成しました。ストーリーボードの2番目のView ControllerへのTableViewCellしかし、アプリケーションが実行され、ユーザーがテーブル内の行をクリックすると、単に行が選択され、segueは実行されません(私はデバッグしてprepareForSegue関数も呼び出されません)。

ここに何か不足していますか? TableViewがView Controller内の唯一のビューでない場合、これは何らかの理由で不可能ですか?

+0

didSelectRowAtIndexPathに

を使用すると、表のセルに一意の識別子を与えている –

+0

私は与える;。。次の行[ゼロ:「SegueIdentifier」送信者@自己performSegueWithIdentifier]を追加しますか?ストーリーボード(プロトタイプセルの属性内)とcellForRowAtIndexPath関数の両方の識別子 "LoadCell"をセルに追加します。これは正しいのですか、それが作成されたときに個々のセルに別個の識別子が与えられるべきですか? – generaltsow

答えて

2

あなたはXcodeでストーリーボードを作成している場合は、次の手順を実行します。

  1. は、あなたのセグエ対象となるのUIViewControllerを作成追加プロトタイプのUITableViewCell
  2. をのUITableViewController
  3. を作成します。
  4. コントロール - プロトタイプのUITableViewCellをクリックし、セグメントターゲットにドラッグします。

これだけです。例えば、UITableViewCellのサブクラスのように、UITableViewCellの特性を編集したいと思うでしょう。

+2

これはまさに私が行ったことですが、UITableViewControllerを持つ代わりに、メインビュー内のサブビューとしてUITableView(別のUIViewと同様)を持つ通常のUIViewControllerがあります。それでも動作しません。 – generaltsow

+0

Xcodeでは、segueターゲットであるコントローラにtableViewCellの「プッシュ」ストーリーボードのセグがリンクされていますか? – GoZoner

+0

はい、もちろんです。 – generaltsow

4

これはあなたを助けるかもしれませんが、私は2つの異なる細胞タイプを定義し、didSelectRowAtIndexPathの実装を提供していたので、この問題に遭遇しました。私はdidSelectRowAtIndexPathの一部として[self performSegueWithIdentifier:@"Whatever" sender:self]を追加しなければならず、問題は解決しました。

少なくとも行の選択を検出できる場合は、この方法を利用できます。あなたは、セルレンダリングをカスタマイズした場合

+0

これは私の問題を解決しましたが、送信者をセルとしています: 'sender:[self.tableView cellForRowAtIndexPath:indexPath]' – brasskazoo

4

、例えば:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

その後、STEの物語の中でプロトタイプセルに指定されますが、同じセル識別子を使用していることを確認。

この場合、セグをフックアップしたセルの「識別子」は、「セル」に設定する必要があります。

+0

これを理解しようとした過去2時間を費やしました(Objective-C今夜はおかげで多くのことが起こりました! –

+0

これは答えです、ありがとうございます。 –

4

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

enter image description here

+0

あなたはこれが起こっているのですか? –

+0

はまだXcode 8に関連しています:) ありがとう。私の問題を解決しました – gutte

-1

は同じ問題を抱えていました。通常のView ControllerのプロトタイプのテーブルビューセルからのSegueは、アプリケーションをクラッシュさせるでしょう。誰かが同じ問題を抱えている場合。

私のソリューション:

あなたは、テーブルビューを使用して最初のビューコントローラがナビゲーションコントローラに組み込まれていることを確認したプッシュセグエを使用している場合はそうでない場合は文句を言わない仕事を「プッシュはsegues」。また、ナビゲーションコントローラーではなく、デスティネーションView Controllerでセグを指示してください!

前述のように、「segue識別子」が正しいことを確認してください。 "didSelectRowAtIndexPath" で

は、私が "[自己performSegueWithIdentifier:@" Your_destination_View_Controller」送信者:自己]呼び出す;。

+0

performSegueWithIdentifierを追加すると、私のアプリケーションがクラッシュし、[UITableViewCell _setHostsLayoutEngine:]のアサーションエラーがスローされます。明らかに、誰もこの問題を抱えていない/解決していません。 –

0

私は同様の問題があった 修正は、ストーリーボード 2でセグエため 1.書き込みSegueIdentifierです。私はこれが役立つだろう願ってい

+0

私のために働いた。ありがとう! – kalan

+0

performSegueWithIdentifierを追加すると、私のアプリケーションがクラッシュし、[UITableViewCell _setHostsLayoutEngine:]でアサーションエラーが発生します。明らかに、誰もこの問題を抱えていない/解決していません。 –

関連する問題