【问题标题】:Hide section for UITableView on first load首次加载时隐藏 UITableView 部分
【发布时间】:2014-05-06 05:58:10
【问题描述】:

我有一个 UITableView 有 2 个部分(第一个用于过滤器,第二个用于数据)。

我想在加载视图时隐藏第一部分。

该部分仅在我滚动到顶部时出现。

我用scrollToRowAtIndexPath: 进行了测试,但结果不如预期。

请帮忙。谢谢。

【问题讨论】:

  • 为什么不从表数据中删除节相关数据。并在需要时添加并重新加载表?
  • 你有什么代码可以添加到你的问题中吗?
  • - (void)viewDidAppear:(BOOL)animated {[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:NSNotFound inSection:1] atScrollPosition:UITableV}iewScrollPositionTop animated:NO];}
  • 否则我用一个标志测试(showAllSections = NO)。并且在委托函数 numberOfRowsInSection 中,如果标志为假,我为第 0 节返回 0;当我滚动到顶部时,我将标志设置为 YES 并重新加载第 0 部分。

标签: ios objective-c uitableview


【解决方案1】:
  • 取一个BOOL 变量来检查是否加载一个部分或 两节。
  • Make 是 YES 在 ViewDidLoad 然后,UITableView 将第一次加载一个部分。
  • 然后当 UITableView 将滚动到顶部时,将 BOOL 变量设置为 NO
- (void)viewDidLoad
{
    [super viewDidLoad];

    isFirstTime = YES;
}
  • 在 TableView 的数据源方法中
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

    if (isFirstTime) {
        return 1;
    }
    return 2;
}
  • 为了检查UITableView滚动TOP。我们将使用UIScrollview的委托方法。UITableView是UIScrollView的子类。
-(void)scrollViewDidScroll:(UITableView *)tableView{

  CGFloat content_Offset = tableView.contentOffset.y;

  if (content_Offset >= 0 && isFirstTime){
    //UITableview is scrolled to top
    isFirstTime = NO;
    [self.myTbaleView reloadData];
   }else if (content_Offset<0) {
    //UITableview is draged down
   }

}

【讨论】:

  • 只有在我先滚动 BOTTOM,然后再滚动 TOP 时才有效。但是如果我在加载 tableview 时滚动 TOP,它就不起作用。
  • 好的。看看我编辑的帖子。你会得到答案。你只需要测试“content_Offset >0”。测试它并告诉我。
  • 感谢@goupilz。但是条件应该是 content_offset >= 0
【解决方案2】:

你可以添加一个BOOL变量来判断它是否是第一次加载。在 viewDidLoad 中将其设置为 true,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

    isFirstTimeLoading = YES;

}

然后在您的 numberOfSectionsInTableView: 委托方法中,

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    if (isFirstTimeLoading)  {
        return 1;
    } else {
        return 2;
    }

}

TableView 滚动到顶部可以使用

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

在这个方法中,检查该行是否是顶行。如果是,则将 isFirstTimeLoading 设为 NO 并重新加载数据。如有必要,请不要忘记更改数据。

【讨论】:

  • 是的,但是方法 willDisplayCell 在第一次加载时也会被调用?
  • 是的,但当时 isFirstTimeLoading 是 YES。所以该部分不会被添加
猜你喜欢
  • 1970-01-01
  • 2011-11-17
  • 1970-01-01
  • 2017-01-24
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多