Ios 如何在像Facebook一样向下滚动后从顶部滚动-Swift 4.2
我想实现像Facebook应用程序一样的滚动功能,如果向下滚动页面,点击标签栏项目,然后点击从顶部开始滚动的同一标签栏项目 这是我的密码-Ios 如何在像Facebook一样向下滚动后从顶部滚动-Swift 4.2,ios,swift,tableview,Ios,Swift,Tableview,我想实现像Facebook应用程序一样的滚动功能,如果向下滚动页面,点击标签栏项目,然后点击从顶部开始滚动的同一标签栏项目 这是我的密码- override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { let indexOfTab = tabBar.items?.index(of: item) if indexOfTab == 0{ let feed =
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
let indexOfTab = tabBar.items?.index(of: item)
if indexOfTab == 0{
let feed = HomeFeedViewController()
feed.scrollToTop()
print("pressed tabBar: \(String(describing: indexOfTab))")
}else if indexOfTab == 1{
print("pressed tabBar: \(String(describing: indexOfTab))")
}else if indexOfTab == 2{
print("pressed tabBar: \(String(describing: indexOfTab))")
}else if indexOfTab == 3{
let feed = QueueViewController()
print("pressed tabBar: \(String(describing: indexOfTab))")
}else if indexOfTab == 4{
print("pressed tabBar: \(String(describing: indexOfTab))")
}
}
func scrollToTop(){
feedsTableView.setContentOffset(.zero, animated: true)
}
请试试我的密码
var canScrollToTop:Bool = true
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
// Allows scrolling to top on second tab bar click
if (viewController.isKindOfClass(CustomNavigationBarClass) && tabBarController.selectedIndex == 0) {
if (viewControllerRef!.canScrollToTop) {
viewControllerRef!.scrollToTop()
}
}
}
// Scrolls to top
func scrollToTop() {
self.View.setContentOffset(CGPoint.zero, animated: true)
self.tblView.setContentOffset(CGPoint.zero, animated: true)
self.collView.setContentOffset(CGPoint.zero, animated: true)
}
// Called when the view becomes available
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
canScrollToTop = true
}
// Called when the view becomes unavailable
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
canScrollToTop = false
}
用于Swift
extension UIViewController {
func scrollToTop() {
func scrollToTop(view: UIView?) {
guard let view = view else { return }
switch view {
case let scrollView as UIScrollView:
if scrollView.scrollsToTop == true {
scrollView.setContentOffset(CGPoint(x: 0.0, y: -scrollView.contentInset.top), animated: true)
return
}
default:
break
}
for subView in view.subviews {
scrollToTop(view: subView)
}
}
scrollToTop(view: self.view)
}
}
使用
var previousController: UIViewController?
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
//when user is in FeedViewController and scroll at last record and want to
if previousController == viewController {
if let navVC = viewController as? UINavigationController, let vc = navVC.viewControllers.first as? HomeViewController {
if vc.isViewLoaded && (vc.view.window != nil) {
vc.scrollToTop()
}
print("same")
}
}
else{
print("No same")
}
previousController = viewController
return true;
}
尝试给出一些代码,我们可以建议我为Tabbar控制器和HomeFeedViewController中的访问创建单独的类。因此,在哪里编写此代码为Tabbar控制器的单独类实现此委托方法并进行检查。您需要点击两次,如果再次点击,它将在日志中打印“相同”,此时它将上升。尝试调试您的案例我的tableview无法访问,在点击次数时总是获得零值在我的tableview中有7个自定义单元格,当我点击第一个选项卡栏按钮时,由于tablview的意外零值而崩溃。