質問編集履歴

3 書式の改善

退会済みユーザー

退会済みユーザー

2017/11/30 23:16  投稿

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

    8241 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    14250 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

2 誤字

退会済みユーザー

退会済みユーザー

2017/11/30 00:45  投稿

RAMAnimatedTabBarControllerの選択されているタブをタップしたらスクロールする
RAMAnimatedTabBarControllerというタブアイコンを装飾するフレームワークを使用しています。
このフレームワークではどうやらdidSelectが機能しないようで、tapHandlerによってイベントを取得しています。
この質問を参考にさせていただきました。
https://teratail.com/questions/97216
ビルドするときには何のエラーもないのですが該当のタブをタップするとエラーが出てしまいます。
timelineがstoryboardIDとして登録されていることは確認済みです。
let storyboard = UIStoryboard(name: "Main", bundle: nil)の"Main"に関しても確認済みです。
何が原因なのでしょうか...?
よろしくお願いします。
```Swift
import UIKit
import RAMAnimatedTabBarController
class CustomTabBarController: RAMAnimatedTabBarController{
   
   /// Determines whether the scrolling capability's enabled.
   var scrollEnabled: Bool = true
   
   private var previousIndex = 0
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
   }
   
   override func tapHandler(_ gesture: UIGestureRecognizer) {
       super.tapHandler(gesture)
       print(selectedIndex)   //print 0 if you tap tabBarItem of FirstViewController
       
       if selectedIndex == 0 {
           
           let indexPath = NSIndexPath(row: 0, section: 0)
           let storyboard = UIStoryboard(name: "Main", bundle: nil)
           let mainVC = storyboard.instantiateViewController(withIdentifier: "timeline") as! ViewController
           mainVC.tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true) // タップするとここでエラーが出ます
           
       }
       
   }
   
}
```
エラー文↓
```
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
```
  • Xcode

    8241 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    14250 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1 参考を追加。

退会済みユーザー

退会済みユーザー

2017/11/30 00:45  投稿

RAMAnimatedTabBarControllerの選択されているタブをタップしたらスクロールする
RAMAnimatedTabBarControllerというタブアイコンを装飾するフレームワークを使用しています。
このフレームワークではどうやらdidSelectが機能しないようで、tapHandlerによってイベントを取得しています。
 
この質問を参考にさせていただきました。  
https://teratail.com/questions/97216  
タイトルにあります通り、すでに選択されているタブを再度たっぷした場合に、最上部までスクロールするtwitterやinstagramのタイムラインのような機能を実装したいです。
ビルドするときには何のエラーもないのですが該当のタブをタップするとエラーが出てしまいます。
timelineがstoryboardIDとして登録されていることは確認済みです。
let storyboard = UIStoryboard(name: "Main", bundle: nil)の"Main"に関しても確認済みです。
何が原因なのでしょうか...?
よろしくお願いします。
```Swift
import UIKit
import RAMAnimatedTabBarController
class CustomTabBarController: RAMAnimatedTabBarController{
   
   /// Determines whether the scrolling capability's enabled.
   var scrollEnabled: Bool = true
   
   private var previousIndex = 0
   
   override func viewDidLoad() {
       super.viewDidLoad()
       
   }
   
   override func tapHandler(_ gesture: UIGestureRecognizer) {
       super.tapHandler(gesture)
       print(selectedIndex)   //print 0 if you tap tabBarItem of FirstViewController
       
       if selectedIndex == 0 {
           
           let indexPath = NSIndexPath(row: 0, section: 0)
           let storyboard = UIStoryboard(name: "Main", bundle: nil)
           let mainVC = storyboard.instantiateViewController(withIdentifier: "timeline") as! ViewController
           mainVC.tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true) // タップするとここでエラーが出ます
           
       }
       
   }
   
}
```
エラー文↓
```
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
```
  • Xcode

    8241 questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • Swift

    14250 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る