Parchment
Parchment copied to clipboard
There is an issue that accidentally gets stuck and cannot keep clicking other tab item
I print some log, Looking forward to your reply: $$$$$: 01 didSelectItem pagingItem = DuPagingTitleIndexItem(index: 13, title: "skateboard"), state = selected(pagingItem: DUCommunity.DuPagingTitleIndexItem(index: 12, title: "Exercise and fitness"))
$$$$$ 02 select pagingItem = DuPagingTitleIndexItem(index: 13, title: "skateboard"), direction = forward(sibling: true), animated = true
$$$$$ 03-1 selectNext animated = true this step call selectNext(:), and goon calling scrollForward(), There is no print next “$$$$$: 04 willScrollToItem state = ...”, It's to say that be not calling setContentOffset when "call scrollForward", the state == .scrolling cannot be changed, And then click anyway, right,slect(index:) come into "defult: break" func selectNext(animated: Bool) { if animated { resetState() delegate?.scrollForward() } else { ... } } and then call scrollForward() func scrollForward() { if isRightToLeft { switch manager.state { case .first, .center: setContentOffset(.zero, animated: true) case .single, .empty, .last: break } } else { switch manager.state { case .first: setContentOffset(pageSize, animated: true) case .center: setContentOffset(pageSize * 2, animated: true) case .single, .empty, .last: break } } }
Hi @zllarry! Do you have any ways of reproducing this issue?
Hello @rechsteiner
I think i know how to do this, because i am facing similar issue right now.
Below flow to do reproduce:
- Add two view controllers into PagingViewController
- Go into second vc
- Call something to update second vc title ( self.title = "new title" ) - title need to be different then initial title
- Call pagingViewController.reloadMenu()
- Menu indicator will switch to first vc and all will be locked
I Can send you movie in private message if you need, just let me know.
Best !
Hi @jaceklapinski! Sorry for the late response. Are you using PagingIndexItem? If you want to change the title of the menu item, but keep the same identity, you probably need to use a custom PagingItem. PagingIndexItem uses the title as part of its Hashable implementation, which means it will be considered a new item when changing the title. This is why the menu will switch to the first view controller. If you were to provide a custom PagingItem with stable identifiers, it should work. You can take a look at the Icons example here for creating custom items.
That said, I think Parchment should handle reloadMenu a bit better here. When calling reloadMenu when the current paging item is removed (because the identity changed), we should probably remove the current content view as well. The way to achieve this today is to use reloadData, but I think it makes sense that reloadMenu does the same.
@rechsteiner i think i know where the problem is right now. And my previous assumptions was wrong
If viewController with Parchment is not visible for example I am on different tab in TabViewController and I am trying to change Parchment selected index using for example
func select(indexPath: IndexPath, animated: Bool)
It will block change pages. I made a small debug session and it looks like that problem is here:
If Parchment is not visible and user try to change selected page line 67 is triggered then when I get back to Parchment and tap on menu line 91 block changes ...
Best !