1

目标/情况:
我目前在 TableView 标题中有一个 UIView。我正在尝试添加另一个 UIView(其中包含两个按钮和一些文本字段),它将位于 TableView 标题上方。我希望当用户向上滚动通过标题(拉“拉刷新”)时显示视图,并在用户按下视图上的“完成”按钮时消失。

我的三个问题:

  1. 如何在 tableview 标题上方添加视图?
  2. 当用户向上滚动超过标题时,如何显示所述视图?
  3. 当用户按下所述视图上的按钮时,如何关闭所述视图?

编辑:
我将按照@kimpoy 的建议将我的自定义视图添加到第三方 PullToRefresh TableViewController。

4

4 回答 4

1

如果我理解正确,您希望通过用户触发 albe 来触发两个不同的方法调用,这取决于用户拉动的程度。

我假设您要添加的 UiView 是“第二个标题”。它应该类似于“拉动刷新标题”。

我认为魔术还利用了 UIScrollView 委托。在许多示例中,您可以看到“Pull to ...”只是检查 scrollView.contentOffset.y

所以,你可能是这样的:

// 检查拉动刷新功能的代码(简化)

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
      if (self.scrollView.contentOffset.y <= - 65.0f) {}
  }

- (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
      if (self.scrollView.contentOffset.y <= - 65.0f) {}
  }

将其更改为:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
     if ( -65.0f <= self.scrollView.contentOffset.y <= - 55.0f  ) {
         // give a area for checking the origin pull to refresh action
     }

     if (self.scrollView.contentOffset.y <= - 65.0f) {
        // checking for ur function
     }
 }

 - (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
     if ( -65.0f <= self.scrollView.contentOffset.y <= - 55.0f ) {
        // give a area for checking the origin pull to refresh action
     }

     if (self.scrollView.contentOffset.y <= - 65.0f) {
        // checking for ur function

        // add ur view the UIScrollView / TableView
        // set ur scrollview offset to show ur whole form
        [scrollView setContentOffset:CGPointMake(0, y)];
     }

  }

最后向你的表单按钮添加一个方法调用来做你想做的事情(删除表单并将scrollView内容偏移设置回(0,0))

(对不起,我说的不是概念,我不确定它是否有效)

于 2012-06-18T07:59:26.677 回答
0

http://three20.info/ 这个框架对你有很大帮助。它有你想要的工作表。并且“拉动刷新”区域是可定制的

于 2012-06-18T03:40:57.077 回答
0

你应该像这样实现它。使用EGORefreshTableHeaderViewPullToRefresh等第三方。

  1. 这两个可以帮助您在表格视图上方创建“拉动刷新”视图。
  2. 在 .h 文件中声明第三方类的实例
  3. 将这两者中的任何一个实例化到您要实现它的类。然后,要在“拉动刷新”视图中拥有自定义外观,只需添加自定义视图。

例如: // .h 文件中的实例 EGoRefreshTableHeaderView *refresh;

// In your .m file

// Set up your custom view with the added buttons and textfields.
UIView *customView...

// Instantiate pull to refresh third party class and add to table
EGoRefreshTableHeaderView *tempRefresh = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableViewCompanyContacts.bounds.size.height, self.view.frame.size.width, self.tableViewCompanyContacts.bounds.size.height)];
[tempRefresh setDelegate:self];

// Add your custom view
[tempRefresh addSubView:customView];

// Set your instance
[self setRefresh:tempRefresh];

// Release temp instance
[tempRefresh release];

// Add your third party to the table
[self.tableView addSubView:refresh];

// Implement delegate method (to refresh)

通常,此视图会在刷新完成后消失或隐藏。只需在代码中添加一些调整,让用户在视图被隐藏时进行处理(例如,单击按钮)。

提供了“拉动刷新”操作的方法。告诉我,如果你发现什么麻烦事。祝你好运!

于 2012-06-18T04:47:00.680 回答
0

在 viewDidLoad 中写下这段代码

tempView = [[UIView alloc] initWithFrame:CGRectMake(7,81,305,40)];  
lbl = [[UILabel alloc] initWithFrame:CGRectMake(40,125,250,20)];  
lbl.text = @"";  
lbl.font = [UIFont fontWithName:@"Haveltica" size:14];  
lbl.textAlignment = UITextAlignmentCenter;  
lbl.textColor = [UIColor whiteColor];  
lbl.backgroundColor = [UIColor clearColor];  
[tempView setBackgroundColor:[UIColor colorWithRed:204/255.0 green:204/255.0 blue:204/255.0 alpha:0]];  
[tempView addSubview:lbl];  
[self.view addSubview:tempView];  
isReload=YES;    


-(void)viewWillAppear:(BOOL)animated  
{

     [super viewWillAppear:animated]; 

    if(isReload==YES)
    {
        // your code;  
    }
    isReload=NO;

}   

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate  
{ 

    NSLog(@"table view height is %f",self.tblview.frame.size.height);  
    NSLog(@"scrollview oringin %f",scrollView.frame.size.height);  
    NSLog(@"Top10VC: ScrollView did end dragging");  
    if (!decelerate)   
    {  
        //[self loadImagesForOnscreenRows];  
    }  
    if(scrollView.contentOffset.y<-60)  
    {  
    [self.spinner startAnimating];  
    [self performSelector:@selector(getdata1)withObject:nil afterDelay:0.2];  

    }  

}  

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView  
{

    NSLog(@"scrollview oringin %f",scrollView.frame.size.height);  
    NSLog(@"Top10VC: ScrollView did end decelerating");  
    //[self loadImagesForOnscreenRows];  
}  

-(void) scrollViewDidScroll:(UIScrollView *)scrollView  
{ 

    tempView.frame = CGRectMake(0,-80 - scrollView.contentOffset.y , 320,80);   
    if(scrollView.contentOffset.y < -60)  
    {         
        lbl.text = @"Updating...";  
                [scrollView setContentOffset:CGPointMake(0, -100)];
    }  
    else  
    {  
        lbl.text = @"";  
    }   
}  
于 2012-06-18T05:14:40.733 回答