#11 - 頁面切換,Segue(轉場),prepare,delegate(頁面間資料傳遞)

頁面切換
最簡單的方法,使用button元件,按住ctrl後滑鼠點擊button元件拖拉到要切換過去的頁面(view controller),選擇show(切換方式)即可完成



segue傳值必備


寫在第一個頁面swift檔中

    @IBAction func goshowmyvoice(_ sender: Any
      {

        self.performSegue(withIdentifier: "showmyvoice", sender: self
         //為固定宣告方式"showmyvoice為連結兩個頁面segueidentifier名稱"
    
      }//第一頁中連結到下一個頁面的Button Action宣告方式
    


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) //prepare固定宣告方式,寫在第一個頁面的swift中
    {
        if segue.identifier == "showmyvoice"//連結兩個頁面segueidentifier名稱
          {
            
            
            let controller = segue.destination asViewController2 
             //指向下個頁面的swift檔,之後就可使用裡面宣告的參數
             //("ViewController2"為本範例中下一個頁面參考的swift檔)
            

            controller.name = String(microsec2
            //指定下一個頁面中由哪個變數來接值
           //name是在下個頁面swift檔(ViewController2)中宣告的一個變數
            
        }
        

    }



基本上作為上述設定,第二個頁面"name"變數就可接受到值,須注意如下

//var name: String!  會印出option("")

var name = "" //直接帶值得宣告就沒事

label.text = "\(name)"

------如果是用TableView傳值,記得要按ctrl將TableView拖拉到ViewController.swift檔中新增
    @IBOutlet var myTableView: UITableView!

之後設定prepare時,要輸入
if let indexPath = myTableView.indexPathForSelectedRow{

才找得到myTableView
---
參考用TableView傳值的prepare設定(寫在第一個頁面的swift中)

   override func prepare(for segue: UIStoryboardSegue, sender: Any?){
        if segue.identifier == "showRestaurantDetail"{
            
            if let indexPath = myTableView.indexPathForSelectedRow{
                
                let destinationController = segue.destination as! RestaurantDetailViewController
                destinationController.restaurantImageName = bgimgArray[indexPath.section]
                
            }
        }

    }


*新增換頁方式
    /*轉場&傳值到checkagain*/
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let threeVC = storyboard.instantiateViewController(withIdentifier: "checkagain") as! Checkagain
            threeVC.image = image
            self.present(threeVC, animated: true, completion: nil)

       /*轉場&傳值到checkagain*/
//Checkagain為接收值的controller swift檔
//withIdentfier為設定的controller(頁面)的名稱

參考:https://www.jianshu.com/p/2b0e3e1e8fa6

TableView傳值到DetailView有問題時參考

https://www.youtube.com/watch?v=6J7Y5RDGcNY

[Swift 4] Unwind Segue:每個畫面的逃生門 (2018)

https://www.youtube.com/watch?v=sRKrb2-T8HY https://medium.com/%E5%BD%BC%E5%BE%97%E6%BD%98%E7%9A%84-swift-ios-app-%E9%96%8B%E7%99%BC%E6%95%99%E5%AE%A4/%E5%A4%9A%E9%A0%81%E9%9D%A2app%E5%92%8C%E9%A0%81%E9%9D%A2%E9%96%93%E7%9A%84%E8%B3%87%E6%96%99%E5%82%B3%E9%81%9E-1-5b97e713561b



https://medium.com/@z1235678/%E4%B8%8D%E5%90%8C%E9%A0%81%E9%9D%A2%E9%96%93%E7%9A%84%E8%B3%87%E6%96%99%E5%82%B3%E5%80%BC-21118465debf


https://medium.com/@jacobhuang/swift-%E7%B0%A1%E6%98%93-segue-%E8%B3%87%E6%96%99%E5%82%B3%E8%BC%B8-8850f2d74a4e



http://swifthao.com/swift3-%E5%82%B3%E9%81%9E%E8%B3%87%E6%96%99%E5%88%B0%E4%B8%8B%E4%B8%80%E9%A0%81%E7%9A%84%E6%96%B9%E6%B3%95%E4%B8%80-%E7%94%A8button%E8%A7%B8%E7%99%BCsegue/



留言