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 是错误的。它仍然是最后一次更改的值。例如,当用户从第三个屏幕滑动到第二个屏幕时,fromIndex 将为 2,toIndex 为 1,但如果用户点击栏上的第三个按钮,fromIndex 仍将为 2,即使它预计为 1即使现在它应该是 2,toIndex 也将保持在 1。这会导致我的 rightBtn 不显示,如果用户从第三个屏幕滑动然后点击该栏回到第三个屏幕。

有没有办法在这种情况下获得正确的 toIndex 或者可以修复?

第一部分是我通过直接点击 barbutton 进行导航的错误部分,没有指针的第二部分是通过滑动进行导航的工作正常,图标只假设出现在第三个选项卡上

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 回答