使用uiscrollview中的更改按钮实现uitableview

时间:2013-04-28 16:29:31

标签: ios uitableview uiscrollview

我看过那些问题,但找不到我想要的东西。 UITableView and Another View inside ScrollView

Programmatically force a UIScrollView to stop scrolling, for sharing a table view with multiple data sources

我正在尝试执行以下操作: 在UIScrollView中,有一个带有几个控制器的UIView。

在它们之下,类似于UISegmentedControl。下面应该是UITableView。 UISegmentedControl将切换UITableView的内容。

所有这些都将出现在UIScrollView中。

我想要实现的是当我向下滚动时,我希望UISegmentedControl保持在视图的顶部。如果我继续向下滚动,则只会滚动UITableView内容。

这可能吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

假设我明白你的要求,我会按以下方式做到这一点:

  1. 将一个UITableView与两个部分
  2. 一起使用
  3. 放置"几个控制器"在表的第一部分。由您决定(在单个细胞中或在任何情况下)。您只需要指示UITableViewDataSource在询问第一部分的内容时返回这些控件
  4. 在UITableViewDelegate方法中 (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    如果该部分 1 ,请构建包含分段控件的视图并将其返回
  5. 每当要求数据源提供第二个部分的内容时,请检查分段控件的状态并返回正确的数据
  6. 每当分段控件发生更改时,捕获事件并重新加载表视图。这样,步骤4将提供在第二部分中显示的新数据,并且该表将改变内容
  7. 这里的诀窍是UITableView部分标题在滚动时会粘在表格的顶部,因此您将完全达到您要搜索的内容。 表格的第一部分将滚动,分段控制器将粘在顶部,第2部分将在其下方滚动。

答案 1 :(得分:0)

我已经实现了一个包含2个部分的UITableView。第一部分没有标题,标题的高度为0。

第一部分的第一个也是唯一一个单元格是我想要滚动的UIView(红色背景)。第二部分的标题是UISegmentedControl(绿色背景)。

- (void)viewDidLoad {
    [super viewDidLoad];

    data = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4", @"5", @"6",@"7", @"8", @"9",@"10",nil];

    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];

    table.delegate = self;
    table.dataSource = self;

    [self.view addSubview:table];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{
    //Return zero for the first section's header.
    if (section == 0)
        return 0;
    return 20;
}

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //Return nil for the first section's header view.
    if (section == 0) return nil;

    head1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
    head1.backgroundColor = [UIColor greenColor];

    return head1;
}

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 0) return 1;

    return data.count;
}

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //First section - put the UIView that will be scrollable
    if (indexPath.section == 0)
    {
        static NSString *CellIdentifier = @"ControlCell1";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

        head = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
        head.backgroundColor = [UIColor redColor];
        [cell.contentView addSubview:head];

        return cell;
    }

    static NSString *CellIdentifier = @"ControlCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }   
    cell.textLabel.text = [data objectAtIndex:indexPath.row];
    return cell;
}