0

ユーザーが画面を変更したときにナビゲーションバーから項目を追加または削除する必要があるため、次のようなコードがあります。

override func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool) {
    super.updateIndicator(for: viewController, fromIndex: fromIndex, toIndex: toIndex, withProgressPercentage: progressPercentage, indexWasChanged: indexWasChanged)
    if indexWasChanged {
        if toIndex == 2 {
            rightBtn.alpha = 1
        } else {
            rightBtn.alpha = 0
        }
    }
}

rightBtn は、ナビゲーション バーの右端にある単なるボタンです。

ただし、テストの実行中に、ユーザーが画面を変更するためにスワイプする代わりに ButtonBar をタップすると、fromIndex と toIndex が間違っていることに気付きました。前回の変更時の値のままです。たとえば、ユーザーが 3 番目の画面から 2 番目の画面にスワイプすると、fromIndex は 2 になり、toIndex は 1 になりますが、ユーザーがバーの 3 番目のボタンをタップすると、fromIndex は 1 であると予想されていても 2 のままになります。 toIndex も 1 のままになりますが、現在は 2 になっているはずです。これにより、ユーザーが 3 番目の画面からスワイプし、バーをタップして 3 番目の画面に戻ると、rightBtn が表示されなくなります。

このようなシナリオで正しい toIndex を取得する方法はありますか、それとも修正できますか?

最初の部分は、バーボタンを直接タップしてナビゲートするバグのある部分です。ポインターのない 2 番目の部分は、スワイプによるナビゲーションで正常に動作します。アイコンは 3 番目のタブにのみ表示されると想定されています。

4

1 に答える 1

1

私は解決策を得ました。同じ問題を抱えている人のために、ButtonBarPagerTabStripViewController に currentIndex があります。したがって、この:

    if indexWasChanged {
        if currentIndex == 2 {
            rightBtn.alpha = 1
        } else {
            rightBtn.alpha = 0
        }
    }

問題の元のコードで機能します。

また、GitHub プロジェクトに行ったところ、この問題に直面している他の誰かが既に報告していることがわかりました。修正され、両方の方法が機能することを願っています。

于 2016-12-21T07:12:11.017 に答える