2017-07-17 39 views
2

我使用的是UITableViewController,我重寫了下面的方法,並嘗試在用戶選擇不同的行時啓用不同的segues。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'來實現這個方法。無論是否放置'override',您的_Update_都不夠清楚。 – OOPer

+0

檢查委託是否與viewController連接 –

回答

3

爲SWIFT 3

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

一件事確保您tabeView single selection屬性選擇..

+0

這個問題清楚地表明他們正在使用'UITableViewController'。你不需要用'UITableViewController'設置委託或者數據源。 – rmaddy

+0

是的,我忘了它。謝謝你指出我.. @ rmaddy – Foolish

1

由於您正在使用UITableViewControlleroverride該功能。否則,如果您在ViewController中使用tableView,請確保將delegate設置爲您的ViewController類。

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

僅供參考 - 這是Swift 2代碼,不是Swift 3. – rmaddy

1

同時檢查的tableView的選擇在AttributeInspector表格視圖您的故事板。它應該被選擇爲單個選擇。 enter image description here

1

好吧,我看到你的代碼。你正在試圖打印一個字符串,並同時繼續。但是你選擇繼續哪個對象。它應是一個陣列或其他東西例如:

瓦爾陣列[「快速」,「IOS」]

DidSelect {

開關:陣列[indexpath.row] 情況3: 打印( 「u selected /(indexpath.row)」) PerformSegue ......... 案例4等......

相關問題