2017-07-17 5 views
2

私はUITableViewControllerを使用しています。私は次の方法をオーバーライドし、ユーザーが別の行を選択したときに別のセグを有効にしようとします。UITableViewControllerのdidSelectRowAtIndexPathが機能しない

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    print("You selected row #\(indexPath.row)!") 
    switch indexPath.row { 
    case 3: 
     performSegue(withIdentifier: "segue3", sender: self) 
    case 8: 
     performSegue(withIdentifier: "segue8", sender: self) 
    default: 
     break 
    } 
} 

実際には、このメソッドは呼び出されず、行を選択すると決して印刷されません。

私は、単一の選択を可能にするユーザーとの対話を有効にし、コントローラ自体にデリゲートとデータソースを設定しました(右UITableViewControllerを、使用するときには、自動的に設定されています?)

私は、静的な細胞およびデフォルトUITableViewCellを使用しています。ビューコントローラはUITableViewControllerです。

enter image description here

更新

私は交換してみてください。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) 

で:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

そしてこれも動作しません。

+0

デリゲートを設定しましたか? – gaskbr

+0

Xcodeのどのバージョンを使用していますか?あなたは 'UITableViewController'を使っていると言いますが、デフォルトの実装をオーバーライドする必要があります。つまり、メソッドにキーワードoverrideが必要です。あなたの_Update_は 'override'を入れるかどうかでは不十分です。 – OOPer

+0

デリゲートがviewControllerに接続されていることを確認してください –

答えて

3

..

+0

質問は、彼らが 'UITableViewController'を使用していることを明確に述べています。デリゲートまたはデータソースを 'UITableViewController'で設定する必要はありません。 – rmaddy

+0

はい私はそれを忘れてしまいました。私を指摘してくれてありがとう.. @ rmaddy – Foolish

1

あなたはUITableViewControlleroverrideの機能を使用しているためです。それ以外の場合は、ViewControllerでtableViewを使用している場合はdelegateViewControllerクラスに設定されていることを確認してください。迅速な3

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 
    //your code... 
} 

と一つのことは、あなたのtabeView single selectionプロパティが選択されていることを確認のため

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     print("You selected row #\(indexPath.row)!") 
     switch indexPath.row { 
     case 3: 
      performSegue(withIdentifier: "segue3", sender: self) 
     case 8: 
      performSegue(withIdentifier: "segue8", sender: self) 
     default: 
      break 
     } 
    } 
+0

ありがとう!私はそのメソッドをオーバーライドする必要があります。私が読んだチュートリアルはUIViewControllerに関するもので、以前は違いが分かりません。 –

+0

FYI - これはSwift 3ではなくSwift 2のコードです。 – rmaddy

1

また、あなたのストーリーボードのテーブルビューのAttributeInspector中のtableViewの選択を確認してください。単一選択にする必要があります。 enter image description here

1

私があなたのコードで見ているものから。あなたは同時に文字列を印刷しようとしており、同時にセグをしようとしています。しかし、どのオブジェクトをセグにするか選択しています。

ヴァール配列[「スウィフト」、「IOS」]

DidSelect {

スイッチ:配列[indexpath.row] ケース3: 印刷(これは、配列または何か他の例でなければなりません"u /(indexpath.row)を選択しました") PerformSegue ......... ケース4など.....

関連する問題