【问题标题】:UIScrollView with paging not working ok带有分页的 UIScrollView 无法正常工作
【发布时间】:2011-10-13 13:36:56
【问题描述】:

我已经实现了一个带有分页的滚动视图,但它不能正常工作。对于滚动视图的每个视图,我必须用某些值填充一个表视图。即使收到的值是正确的,所有视图都是相同的(最后一个视图是滚动视图每个子视图上的视图)我的错误在哪里?

这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];


    self.vehiculesenvisagesScrollView.pagingEnabled = YES;
    self.vehiculesenvisagesScrollView.contentSize = CGSizeMake(vehiculesenvisagesScrollView.frame.size.width * [vehiculesEnvisages count], vehiculesenvisagesScrollView.frame.size.height);
    self.vehiculesenvisagesScrollView.showsHorizontalScrollIndicator = NO;
    self.vehiculesenvisagesScrollView.showsVerticalScrollIndicator = NO;
    self.vehiculesenvisagesScrollView.scrollsToTop = NO;


    vehiculesEnvisagesArray = [[NSMutableArray alloc] initWithObjects:@"Gamme", @"Usage",@"Délai d'echart",@"Type d'achart",@"Financement", nil];


    for (int i=0; i<[vehiculesEnvisages count];i++){
        [self loadScrollViewWithPage:i];
    }

     NSLog(@"views %@",[vehiculesenvisagesScrollView subviews]);

    self.pageControlVehiculeEnvisages.numberOfPages=[vehiculesEnvisages count];
    self.pageControlVehiculeEnvisages.currentPage=0;    
}

- (void) loadScrollViewWithPage: (int) page {

    NSLog(@"%d",page);
    if (page < 0) return;
    if (page >= [vehiculesEnvisages count]) return;

    CGRect frame;
    frame.origin.x = self.vehiculesenvisagesScrollView.frame.size.width * page;
    frame.origin.y = 0;
    frame.size = self.vehiculesenvisagesScrollView.frame.size;

    UIView *oneview = [[UIView alloc] initWithFrame:frame]; 

    tableViewVehiculesEnvisages=[[UITableView alloc] initWithFrame:CGRectMake(3, 0, 320, 233) style:UITableViewStyleGrouped];
    tableViewVehiculesEnvisages.bounces=NO;
    tableViewVehiculesEnvisages.backgroundColor=[UIColor clearColor];
    [tableViewVehiculesEnvisages setDelegate:self];
    [tableViewVehiculesEnvisages setDataSource:self];        

    self.gammeString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"gamme"];
    self.usageString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"usage"];
    self.delaiString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"delai"];
    self.typeString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"achat"];
    self.financementString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"financement"];

    [oneview addSubview:tableViewVehiculesEnvisages];

    NSLog(@"gamme%@", self.gammeString);
    [self.vehiculesenvisagesScrollView addSubview:oneview];
    [oneview release];

}

其中gammeString,usageString,delaiString,typeString,financementString 包含将设置为tableview 单元格上的某些标签的文本。

这是我的cellForRowAtIndexPath 方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellRecherchePartenaires"];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"CellRecherchePartenaires"] autorelease];

        cell.backgroundColor = [UIColor clearColor];
        cell.selectionStyle = UITableViewCellSelectionStyleGray;
        cell.backgroundView.opaque = NO;

        cell.textLabel.backgroundColor = [UIColor clearColor];
        cell.textLabel.opaque = NO;
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.highlightedTextColor = [UIColor whiteColor];
        cell.textLabel.font = [UIFont boldSystemFontOfSize:15];

        cell.detailTextLabel.backgroundColor = [UIColor clearColor];
        cell.detailTextLabel.opaque = NO;
        cell.detailTextLabel.textColor = [UIColor whiteColor];
        cell.detailTextLabel.highlightedTextColor = [UIColor whiteColor];
        cell.detailTextLabel.font = [UIFont systemFontOfSize:15];

        if (indexPath.row==0)
        {
            gammeLabel = [[UILabel alloc] init];
            gammeLabel.frame = CGRectMake(150, -4, 150, 50);
            gammeLabel.textColor=[UIColor grayColor];
            gammeLabel.backgroundColor=[UIColor clearColor];
            gammeLabel.text = self.gammeString;  
            [cell.contentView addSubview: [gammeLabel autorelease]];   
        }

        if(indexPath.row==1)
        {
            usageLabel = [[UILabel alloc] init];
            usageLabel.frame = CGRectMake(150, -4, 150, 50);
            usageLabel.textColor=[UIColor grayColor];
            usageLabel.backgroundColor=[UIColor clearColor];
            usageLabel.text = self.usageString;
            [cell.contentView addSubview: [usageLabel autorelease]];
        }

        if(indexPath.row==2)
        {
            delaiLabel = [[UILabel alloc] init];
            delaiLabel.frame = CGRectMake( 150, -4, 150, 50);
            delaiLabel.textColor = [UIColor grayColor];
            delaiLabel.backgroundColor = [UIColor clearColor];
            delaiLabel.text = self.delaiString;
            [cell.contentView addSubview: [delaiLabel autorelease]];

        }

        if(indexPath.row==3)
        {
            typeLabel = [[UILabel alloc] init];
            typeLabel.frame = CGRectMake( 150, -4, 150, 50);
            typeLabel.textColor = [UIColor grayColor];
            typeLabel.backgroundColor = [UIColor clearColor];
            typeLabel.text =self.typeString;
            [cell.contentView addSubview: [typeLabel autorelease]];

        }

        if(indexPath.row==4)
        {
            financementLabel = [[UILabel alloc] init];
            financementLabel.frame = CGRectMake( 150, -4, 150, 50);
            financementLabel.textColor = [UIColor grayColor];
            financementLabel.backgroundColor = [UIColor clearColor];
            financementLabel.text = self.financementString;
            [cell.contentView addSubview: [financementLabel autorelease]];

        }

    }
    [[cell textLabel] setText: [vehiculesEnvisagesArray objectAtIndex:indexPath.row]] ;

    return cell;
}

【问题讨论】:

  • 您的数据源方法是如何实现的? (尤其是tableView:cellForRowAtIndexPath: 方法)
  • 我有一种方法可以从 php 脚本接收这个数组。没关系,它看起来像这样: [{"gamme":"Audi R8 Spyder","usage":"Priv\u00e9","delai":"Plus de 12 mois","achat":"Neuf", "financement":"Comptant"},{"gamme":"Audi A1","usage":"","delai":"","achat":"","financement":""},{" gamme":"Audi A1","usage":"","delai":"","achat":"","financement":""},{"gamme":"Audi R8 Spyder","usage ":"Priv\u00e9","delai":"Plus de 12 mois","achat":"Neuf","financement":"Comptant"}] 我从中获取信息
  • 据我了解vehiculesEnvisagesArray 根本没有改变,它是您所有表视图的数据源,不是吗?因此,我希望在所有表视图上填充相同的值,除非当用户在页面之间滚动时更改数组中的数据。
  • vehiculesEnvisagesArray 对于每个 tableview 都必须相同...更改页面时必须更改标签中的文本
  • 您如何更改这些值,即self.gammeString 和类似字符串的值?

标签: iphone xcode4 uiscrollview uipagecontrol


【解决方案1】:
- (void) loadScrollViewWithPage: (int) page {

NSLog(@"%d",page);
if (page < 0) return;
if (page >= [vehiculesEnvisages count]) return;

CGRect frame;
frame.origin.x = self.vehiculesenvisagesScrollView.frame.size.width * page;
frame.origin.y = 0;
frame.size = self.vehiculesenvisagesScrollView.frame.size;

UIView *oneview = [[UIView alloc] initWithFrame:frame]; 

tableViewVehiculesEnvisages=[[UITableView alloc] initWithFrame:CGRectMake(3, 0, 320, 233) style:UITableViewStyleGrouped];
tableViewVehiculesEnvisages.tag=page;
tableViewVehiculesEnvisages.bounces=NO;
tableViewVehiculesEnvisages.backgroundColor=[UIColor clearColor];
[tableViewVehiculesEnvisages setDelegate:self];
[tableViewVehiculesEnvisages setDataSource:self];        

 [oneview addSubview:tableViewVehiculesEnvisages];

NSLog(@"gamme%@", self.gammeString);
[self.vehiculesenvisagesScrollView addSubview:oneview];
[oneview release];

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellRecherchePartenaires"];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"CellRecherchePartenaires"] autorelease];
}

    [self setTextt:tableView.tag];

    cell.backgroundColor = [UIColor clearColor];
    cell.selectionStyle = UITableViewCellSelectionStyleGray;
    cell.backgroundView.opaque = NO;

    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.textLabel.opaque = NO;
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.textLabel.highlightedTextColor = [UIColor whiteColor];
    cell.textLabel.font = [UIFont boldSystemFontOfSize:15];

    cell.detailTextLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.opaque = NO;
    cell.detailTextLabel.textColor = [UIColor whiteColor];
    cell.detailTextLabel.highlightedTextColor = [UIColor whiteColor];
    cell.detailTextLabel.font = [UIFont systemFontOfSize:15];

    if (indexPath.row==0)
    {
        gammeLabel = [[UILabel alloc] init];
        gammeLabel.frame = CGRectMake(150, -4, 150, 50);
        gammeLabel.textColor=[UIColor grayColor];
        gammeLabel.backgroundColor=[UIColor clearColor];
        gammeLabel.text = self.gammeString;  
        [cell.contentView addSubview: [gammeLabel autorelease]];   
    }

    if(indexPath.row==1)
    {
        usageLabel = [[UILabel alloc] init];
        usageLabel.frame = CGRectMake(150, -4, 150, 50);
        usageLabel.textColor=[UIColor grayColor];
        usageLabel.backgroundColor=[UIColor clearColor];
        usageLabel.text = self.usageString;
        [cell.contentView addSubview: [usageLabel autorelease]];
    }

    if(indexPath.row==2)
    {
        delaiLabel = [[UILabel alloc] init];
        delaiLabel.frame = CGRectMake( 150, -4, 150, 50);
        delaiLabel.textColor = [UIColor grayColor];
        delaiLabel.backgroundColor = [UIColor clearColor];
        delaiLabel.text = self.delaiString;
        [cell.contentView addSubview: [delaiLabel autorelease]];

    }

    if(indexPath.row==3)
    {
        typeLabel = [[UILabel alloc] init];
        typeLabel.frame = CGRectMake( 150, -4, 150, 50);
        typeLabel.textColor = [UIColor grayColor];
        typeLabel.backgroundColor = [UIColor clearColor];
        typeLabel.text =self.typeString;
        [cell.contentView addSubview: [typeLabel autorelease]];

    }

    if(indexPath.row==4)
    {
        financementLabel = [[UILabel alloc] init];
        financementLabel.frame = CGRectMake( 150, -4, 150, 50);
        financementLabel.textColor = [UIColor grayColor];
        financementLabel.backgroundColor = [UIColor clearColor];
        financementLabel.text = self.financementString;
        [cell.contentView addSubview: [financementLabel autorelease]];

    }

[[cell textLabel] setText: [vehiculesEnvisagesArray objectAtIndex:indexPath.row]] ;

return cell;
}   



-(void)setTextt:(int)page
{
self.gammeString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"gamme"];
self.usageString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"usage"];
self.delaiString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"delai"];
self.typeString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"achat"];
self.financementString=[[vehiculesEnvisages objectAtIndex:page]valueForKey:@"financement"];

}

用此代码替换您的代码,您肯定会得到解决方案。

【讨论】:

  • 我在 [self setText:(vehiculesenvisagesScrollView.contentOffset.x/320)] 行出现错误;
  • 是的,我在那边传页码。所以从你那边传过来,你在那里得到解决方案......!
  • (vehiculesenvisagesScrollView.contentOffset.x 为空
  • 现在对代码做了一些更改,请用这个替换你的代码。
【解决方案2】:

我找到了我的问题的解决方案:我使用 NSMutableArray 而不是 NSString,它工作正常。

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 2012-02-22
    • 2013-12-14
    • 2014-09-21
    • 2013-08-22
    • 2012-09-25
    相关资源
    最近更新 更多