2017-11-09 17 views
0

私はUITabBarControllerを持つUITabBarを持っています。このコントローラでは、tabBarアイテムを無効/有効にするなど、TabBarを調整しています。私はviewDidLoadでそれをやっています。UITabBarはUIButtonのアイテムを無効/有効にします

しかし、これらの調整のためのトリガーは、関連するタブの1つにあり、ビューコントローラーになります。トリガーはボタンになり、ボタンを押すとtabBarの項目の1つが「無効」から「有効」に変わります。

使用する必要があるtabBarリロード機能はありますか?これを実現するために何らかの形でUITabBarControllerをリロードする必要がありますか?

ありがとうございます - ご協力いただきありがとうございます。

編集: UITabBarControllerとUIViewControllerのVCは以下のとおりです。

UITabBarController

class TabBarVC: UITabBarController, TopRatedVCDelegate { 


var tabBarItem1 = UITabBarItem() 
var tabBarItem2 = UITabBarItem() 
var tabBarItem3 = UITabBarItem() 
var tabBarItem4 = UITabBarItem() 

override func viewDidLoad() { 
    super.viewDidLoad() 
} 

func setbar() { 

    let tabBarControllerItems = tabBar.items 

    if let tabArray = tabBarControllerItems { 
     tabBarItem1 = tabArray[0] 
     tabBarItem2 = tabArray[1] 
     tabBarItem3 = tabArray[2] 
     tabBarItem4 = tabArray[3] 
    } 
     tabBarItem1.isEnabled = true 
     tabBarItem1.badgeValue = "99" 
     tabBarItem2.isEnabled = false 
     tabBarItem3.isEnabled = true 
     tabBarItem4.isEnabled = true 
} 
} 

のUIViewControllerボタン

protocol TopRatedVCDelegate: class { 
    func setbar() 
} 

class TopRatedVC: UIViewController { 

@IBOutlet weak var userDefValueLbl: UILabel! 

weak var delegate: TopRatedVCDelegate? 

override func viewDidLoad() { 
    super.viewDidLoad() 

} 


@IBAction func btnPressed(_ sender: Any) { 
    delegate?.setbar() 
} 
} 
+0

あなたはおそらくプロトコル/委任パターンを使いたいと思う。これはあなたの 'トリガーボタン'があなたのカスタム 'UITabBarController'に"コールバック "できるようにします。ここであなたは無効化/有効化タブ(またはあなたがやりたいこと)を処理できます。 – DonMag

+0

それはうまくいくようなこの音です。どのように私はそれを行うことができますどのような例がありますか?私は実際にボタンを押して、チェックを実行するがUITabBarControllerでUserDefaultsにいくつかの値を保存することで別の方法で試しましたが、これはtabBarがロードされた後にのみ機能しました。 ボタンをクリックしてチェックを実行すると、バーの「リロード」を呼び出すことができるので、いつでも作業したいと思っています... –

答えて

0

と私はあなたに委任パターンを説明しましょう。コントローラやビューのようなコンポーネント間で効率的にやり取りする方法です。 次の6つの手順を実行する必要があります。

  1. 要件を満たすプロトコルを追加する必要があります。あなたのケースでは、updateTabItemsという機能を追加して、タブバー項目を有効または無効にすることができます。
  2. あなたはちょうどこのように作成するプロトコルタイプとデリゲートのプロパティを追加する必要があります。weak var delegate: ProtocolType?
  3. は、このようなあなたのデリゲートプロパティの関数を呼び出します:delegate?.updateTabItems()
  4. 2番目のコントローラ、ビューまたはコンポーネントで、それが必要そして、このclass Controller : YourProtocol
  5. のようなあなたのプロトコルに準拠するために、あなたは最後にメソッドを実装self
  6. にデリゲートプロパティを設定する必要がupdateTabItems

次は、委任パターンの完全な説明です。あなたの毎日のルーチンで非常に重要で非常に有用IOS開発者として:Delegation pattern

+0

こんにちは、 これは素晴らしいです!これを送ってくれてありがとう。私はそれを理解していると思いますが、私には1つの質問があります。ポイント5では、デリゲートプロパティをselfに設定する方法について説明しています。サンプルの記事(委譲パターン)では、男が "prepareForSegue"メソッドでそれを設定しています。私はセグを実行していないので、デリゲートをどこに設定するかわからない。 参考までに私のVCのコードをオリジナルの質問に追加しました。 –

+0

一般に、別のクラスに配置したデリゲートプロパティにアクセスできる場所に配置する必要があります。この例では、デリゲートプロパティにアクセスして設定できるビューコントローラをインスタンス化するため、prepareForSegueに設定します。 – Arrabidas92

+0

私はいくつかのビデオを見ていて、メソッドを説明している誰もが、tabBarのタブを切り替えると実際のセグにはならないので、私には使えないprepareForSegueでVCをインスタンス化します。 - \ –

関連する問題