2017-04-24 143 views
0

我想選擇一行然後將其索引到另一個視圖控制器。我已經創建了一個「didselectrow」的函數,但是這不會導航到下一個視圖控制器。任何解決方案或幫助將不勝感激。帶有tableview的ViewController到另一個視圖控制器

進口的UIKit 進口CoreData

class CoreViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource { 

@IBOutlet var tableView: UITableView! 

var users : [Users] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 


    tableView.dataSource = self 
    tableView.delegate = self 

    // Do any additional setup after loading the view. 
} 

//view the data on the table view appear 

override func viewDidAppear(_ animated: Bool) { 

    // get data 
    getData() 

    //reload data 
    tableView.reloadData() 
} 


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return users.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = UITableViewCell() 
    let user = users[indexPath.row] 

    if user.isimportant 
    { 
     cell.textLabel?.text = "\(user.username!)" 
    } 
    else 
    { 
     cell.textLabel?.text = user.username! //entity name in textlabel 
    } 
    return cell 

} 

func getData() 
{ 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    do{ 
     users = try context.fetch(Users.fetchRequest()) 
    } 
    catch { 
     print ("Fetching Failed ") 
    } 

} 

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
    if editingStyle == .delete 
    { 
     let user = users[indexPath.row] 
     context.delete(user) 

     (UIApplication.shared.delegate as! AppDelegate).saveContext() 

     do{ 
      users = try context.fetch(Users.fetchRequest()) 
     } 
     catch { 
      print ("Fetching Failed ") 
     } 
    } 
    tableView.reloadData() 
} 


func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: QuestionsViewController) { 
    performSegue(withIdentifier: "questionview", sender: nil) 
} 




/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 
+0

哪裏是你的preapareforSegue方法寫在你的代碼 –

+0

你確定你是在故事板上製作的? –

+0

執行segue是在函數didselectrow – Jonathon

回答

1

試試這個!

呼叫從

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

     self.performSegueWithIdentifier("questionview", sender: nil) 

    } 

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    if (segue.identifier == "questionview") { 
     let viewController:ViewController = segue!.destinationViewController as ViewController 
     let indexPath = self.tableView.indexPathForSelectedRow() 
     viewController.mydata = self.myarray[indexPath.row] 
    } 
} 
+0

我在這一行插入什麼? viewController.mydata = self.myarray [indexPath.row] – Jonathon

1

你需要didselectAtIndexPathRow調用

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    performSegue(withIdentifier: "questionview", sender: nil) 
} 
+0

仍然不能正常工作 – Jonathon

+0

您是否在故事板中分配了questionview? – KKRocks

+0

@Jonathon你必須設置questionView作爲視圖控制器ID – unixb0y

0

你didSelectRow方法不正確,你做了什麼傳遞QuestionsViewController類型爲indexpath的SEGUE

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: QuestionsViewController) { 
    performSegue(withIdentifier: "questionview", sender: nil) 
} 

應該是,

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     performSegue(withIdentifier: "questionview", sender: nil) 
    } 
0

你可以試試這個

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

    let cell = self.tableView.cellForRow(at: indexPath as IndexPath) 

self.performSegue(withIdentifier: "yoursegueIdentifier", sender: nil) 

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 

    let theDestinationVC = (segue.destination as! NextVC) 

} 
0

步驟1:添加2視圖控制器

步驟2:添加在第一的viewController表視圖

步驟3:添加的tableview細胞表圖(給予標識符 「小區」)

第4步:檢查表視圖屬性

step 4 Image

步驟5:準備賽格瑞方式(第一視圖控制器第二視圖 - 控制器)

how to prepare this segue

步驟6:這裏是完整的代碼

class CoreViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource { 

    @IBOutlet var tableView: UITableView! 

    var users : [Users] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     tableView.dataSource = self 
     tableView.delegate = self 

     // Do any additional setup after loading the view. 
    } 

    //view the data on the table view appear 

    override func viewDidAppear(_ animated: Bool) { 

     // get data 
     getData() 

     //reload data 
     tableView.reloadData() 
    } 


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return users.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     let cell = UITableViewCell() 
     let user = users[indexPath.row] 

     if user.isimportant 
     { 
      cell.textLabel?.text = "\(user.username!)" 
     } 
     else 
     { 
      cell.textLabel?.text = user.username! //entity name in textlabel 
     } 
     return cell 

    } 

    func getData() 
    { 
     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

     do{ 
      users = try context.fetch(Users.fetchRequest()) 
     } 
     catch { 
      print ("Fetching Failed ") 
     } 

    } 

    func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { 

     let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
     if editingStyle == .delete 
     { 
      let user = users[indexPath.row] 
      context.delete(user) 

      (UIApplication.shared.delegate as! AppDelegate).saveContext() 

      do{ 
       users = try context.fetch(Users.fetchRequest()) 
      } 
      catch { 
       print ("Fetching Failed ") 
      } 
     } 
     tableView.reloadData() 
    } 


    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: QuestionsViewController) { 
     performSegue(withIdentifier: "questionview", sender: nil) 
    } 



    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "questionview" { 

     } 
    } 
    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    } 
    */ 

} 
相關問題