【问题标题】:Scroll to top of view on second click of custom tab bar: Objective-C第二次单击自定义标签栏时滚动到视图顶部:Objective-C
【发布时间】:2016-04-02 11:04:44
【问题描述】:

我正在尝试这样当用户第二次单击标签栏项目时,它们将自动滚动到当前屏幕的顶部。

我有一个自定义标签栏视图,使用以下代码在视图之间切换:

- (IBAction)onTabSelectionChange:(id)sender {
    UIButton *btn = (UIButton*)sender;
    previousIndex = currentIndex;
    currentIndex = btn.tag;

    if (btn.tag == previousIndex){
       // This is where the code should probably go?
    } else {
        if (previousIndex != 0){
            UIButton *btnpreviousIndex = (UIButton*)[tabView viewWithTag:previousIndex];

            if (btnpreviousIndex != nil && previousIndex != -1){
                [btnpreviousIndex setSelected:NO];
            }
            [btn setSelected:YES];
        }
    }
    appDelegate.currentTab = currentIndex;

    switch (currentIndex) {
        case TABHOME: {
            UINavigationController *navController = [appDelegate.arrViewControllers objectAtIndex:0];
            navController.navigationBarHidden = YES;
            [navController popToRootViewControllerAnimated:NO];
            [self presentThisView: navController];
        }
            break;
        case TABTIMELINE: {
            UINavigationController *navController = [appDelegate.arrViewControllers objectAtIndex:1];
            [self presentThisView: navController];
        }
            break;
        case TABNOTIFICATION: {
            UINavigationController *navController = [appDelegate.arrViewControllers objectAtIndex:2];
            [self presentThisView: navController];
            break;
        }
        case TABMISCELLANEOUS: {
            UINavigationController *navController = [appDelegate.arrViewControllers objectAtIndex:3];
            [self presentThisView: navController];
            break;
        }
        default:
            break;
    }
}

提前感谢您的帮助!

【问题讨论】:

    标签: ios objective-c ios7 uitabbarcontroller scrolltop


    【解决方案1】:

    如果是滚动视图,那么是的,您可以将此代码放在您指定的位置:

    [scrollView setContentOffset:CGPointZero animated:YES];
    

    更新:

    您需要在当前标签索引处访问视图控制器,然后您可以在其中获取 collectionView 并执行以下操作:

    [self.collectionView setContentOffset:CGPointMake(0.0f,0.0f)];
    

    你真的应该实现UITabBarControllerDelegate并将你当前的代码放在方法中

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController*)viewController {
    

    这样您就可以知道之前和选择的视图控制器是什么,然后还可以按照我的建议访问里面的集合视图。

    【讨论】:

    • 这是一个collectionView,它告诉我选择器'setContentOffset'没有已知的类方法
    【解决方案2】:

    你可以使用这个方法滚动到任何你想要的collectionview项目,

    - (void)scrollToItemAtIndexPath:(NSIndexPath *)indexPath 
                   atScrollPosition:(UICollectionViewScrollPosition)scrollPosition 
                           animated:(BOOL)animated
    

    或者你也可以使用,[collectionView setContentOffset:CGPointZero animated:YES];

    如果你想回到集合的最开始,你可以简单地使用 CGPointZero

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多