RAMAnimatedTabBarControllerというタブアイコンを装飾するフレームワークを使用しています。
このフレームワークではどうやらdidSelectが機能しないようで、tapHandlerによってイベントを取得しています。
この質問を参考にさせていただきました。
https://teratail.com/questions/97216
タイトルにあります通り、すでに選択されているタブを再度タップした場合に、最上部までスクロールするtwitterやinstagramのタイムラインのような機能を実装したいです。
ビルドするときには何のエラーもないのですが該当のタブをタップするとエラーが出てしまいます。
timelineがstoryboardIDとして登録されていることは確認済みです。
let storyboard = UIStoryboard(name: "Main", bundle: nil)の"Main"に関しても確認済みです。
何が原因なのでしょうか...?
よろしくお願いします。
Swift
1import UIKit 2import RAMAnimatedTabBarController 3 4 5class CustomTabBarController: RAMAnimatedTabBarController{ 6 7 /// Determines whether the scrolling capability's enabled. 8 var scrollEnabled: Bool = true 9 10 private var previousIndex = 0 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 } 16 17 override func tapHandler(_ gesture: UIGestureRecognizer) { 18 super.tapHandler(gesture) 19 print(selectedIndex) //print 0 if you tap tabBarItem of FirstViewController 20 21 if selectedIndex == 0 { 22 23 let indexPath = NSIndexPath(row: 0, section: 0) 24 let storyboard = UIStoryboard(name: "Main", bundle: nil) 25 let mainVC = storyboard.instantiateViewController(withIdentifier: "timeline") as! ViewController 26 mainVC.tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true) // タップするとここでエラーが出ます 27 28 } 29 30 } 31 32}
エラー文↓
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
didSelectがupdateによって動くようになったらしいので追記
以下のように記述しましたがdidSelectは反応せず...
"WHY"はプリントされません...
Swift
1import UIKit 2import RAMAnimatedTabBarController 3 4 5class CustomTabBarController: RAMAnimatedTabBarController, UITabBarControllerDelegate{ 6 7 /// Determines whether the scrolling capability's enabled. 8 var scrollEnabled: Bool = true 9 10 private var previousIndex = 0 11 12 override func viewDidLoad() { 13 super.viewDidLoad() 14 15 self.delegate = self 16 17 } 18 19 func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 20 let tabBarIndex = tabBarController.selectedIndex 21 22 print("WHY") 23 24 if tabBarIndex == 0 { 25 let indexPath = NSIndexPath(row: 0, section: 0) 26 let navigVC = viewController as? UINavigationController 27 let finalVC = navigVC?.viewControllers[0] as? ViewController 28 finalVC?.tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true) 29 30 } 31 } 32 33}
回答1件
あなたの回答
tips
プレビュー