#8 將畫面上多個元件變成 array 的 outlet collection
阿笠博士的冷笑話時間!
作業有2個地方用到outlet collection:選擇題的Label & Button改背景顏色
Debug流水帳:
1. array jokes想做random出題,使用jokes.shuffle()洗牌,出下一題之前把當前的題目刪掉jokes.remove(at: 0),出題時的資料都會在jokes[0]
2. Button select時我會改變背景顏色,不要反灰的動畫(uncheck Highlighted Adjusts Image)
3. UIButton 可用sender.tag來判斷是按到哪一個(要設定tag)
4. 用IBSegueAction傳值到result page
button先拉segue-show to resultViewController, set var data:Int!(一開始沒有值,但以後一定會有值), 從箭頭拉IBSegueAction to 起始ViewController, 把值填入controller?.data, return controller
5. 換頁方式(從箭頭選屬性):Present Modally可選full screen, Cross Dissolve變成全螢幕且無換頁動畫
6. 跳轉到別的controller的方法:(只能選一種)
a.把btn的線拉到目的地controller
b.在目的地controller寫好unWind func,起點controller拉線到Exit即可選擇
c.起點controller拉線到目的地controller, 線設id, btn設action, performSegue(“id”)
d.present//let controller = storyboard?.instantiateViewController(identifier: “xxxView”
e.push ViewController
prepare+identifier+unWind不能同時使用(因為要1才能設identifier)
f. tabBarController?.selectedIndex//print tabBarController?.viewControllers
7. 傳資料到別的controller的方法:
先把btn的線拉到目的地controller(並宣告要傳的變數)
a.IBSegueAction(iOS 13以上): 從線去拉IBSegueAction去寫入要傳的值
b.prepare: let controller = segue.destination去選目的地controller, 直接使用controller傳值(可判斷segue.identifier來傳入不同的值)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "playSegue"{
if let controller = segue.destination as? badJokesViewController{
controller.correctCount = 5
}
}
}
c.performSegue(sender)可傳到prepare用,要轉型
GitHub: