jjzjj

ios - TableView 单元格仅在滚动一次后显示实际数据

coder 2024-01-18 原文

NSArray *sectionArray;
int sectionCount=0;
NSDictionary *orderedData;
NSString *checkInStr, *checkOutStr;
NSString *govtTaxes, *enhancementTotal, *grandTotal;

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setupTable];

    [self.bookingsTableView reloadData];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

-(void)viewDidDisappear:(BOOL)animated {
    if(doesSendNotification){
        NSLog(@"summary view disappeared");
        [[NSNotificationCenter defaultCenter] postNotificationName:@"SummaryViewDismissedNotification" object:self];
    }
}

-(void)viewWillAppear:(BOOL)animated {
    [self.bookingsTableView reloadData];
}

-(void)setupTable {

    self.bookingsTableView.rowHeight = UITableViewAutomaticDimension;
    self.bookingsTableView.estimatedRowHeight = 50.0;
    sectionArray = [[SummaryModel sharedInstance] getTableSections:self.s_sendEnhancementServerDict];
    orderedData = [[SummaryModel sharedInstance] getOrderedData:self.s_sendEnhancementServerDict];

    [self.bookingsTableView reloadData];
}





#pragma mark- UITableview delegate and datasource methods

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    if(section==0){

        return 3;

    } else if (section>0 && section<(sectionCount-1)){
        int rows=(int)[[orderedData objectForKey:(NSString*)[sectionArray objectAtIndex:section]] count];
        return rows;

    } else {

        return 4;

    }
}

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    return (NSString*)[sectionArray objectAtIndex:section];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    NSString *cellIdentifier;
    UITableViewCell *cell;

//    UITableView *table = (UITableView*)[self.view viewWithTag:11];
    if (indexPath.section==0 && indexPath.row>=0 && indexPath.row<=2) {

        cellIdentifier =@"SplitCell";
        cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
        UILabel *l1 = (UILabel*)[cell viewWithTag:1];
        UILabel *l2 = (UILabel*)[cell viewWithTag:2];

        if(indexPath.row==0){
            l1.attributedText = [self getStyledString1:@"Hotel Name"];
            l2.attributedText = [self getStyledString:self.s_propertyName];
        } else if(indexPath.row==1){
            l1.attributedText = [self getStyledString1:@"Arrival Date:"];
            l2.attributedText = [self getStyledString:checkInStr];
        } else if(indexPath.row==2){
            l1.attributedText = [self getStyledString1:@"Departure Date:"];
            l2.attributedText = [self getStyledString:checkOutStr];
        }


    } else if (indexPath.section>0 && indexPath.section<(sectionCount-1)) {

        //        for(int i=0;i<5;i++){

        cellIdentifier=@"VerticalLabelCell";
        cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
        UILabel *l3 = (UILabel*)[cell viewWithTag:3];
        UILabel *l4 = (UILabel*)[cell viewWithTag:4];
        l3.layer.backgroundColor = GOLDEN_COLOR.CGColor;

        NSArray *roomTypeArray = [orderedData objectForKey:(NSString*)[sectionArray objectAtIndex:indexPath.section]];
        NSDictionary *roomD = [roomTypeArray objectAtIndex:indexPath.row];

        NSString *header = [roomD objectForKey:@"room_type_name"];
        NSAttributedString *sH = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@" %@",header] attributes:@{NSFontAttributeName:ARIAL_FONT_BOLD}];
        l3.attributedText = sH;

        int roomCount = [(NSNumber*)[roomD objectForKey:@"room_units"] intValue];
        NSMutableAttributedString *labelText = [[NSMutableAttributedString alloc] init];
        for(int i=0;i<roomCount;i++){

            NSString *roomNo = [NSString stringWithFormat:@"\n Room # %d\n",i+1];
            NSAttributedString *s = [[NSAttributedString alloc] initWithString:roomNo attributes:@{NSFontAttributeName:ARIAL_FONT_BOLD, NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle)}];
            [labelText appendAttributedString:s];

            NSString *adults = [NSString stringWithFormat:@" Adults: %@ \t\t Max. Adults: %@ \n",[roomD objectForKey:@"max_adults"],[roomD objectForKey:@"max_adults"]];

            NSAttributedString *s1 = [[NSAttributedString alloc] initWithString:adults attributes:@{NSFontAttributeName:ARIAL_FONT_BOLD}];
            [labelText appendAttributedString:s1];

            NSArray *enhanc = [(NSArray*)[roomD objectForKey:@"room_features"] objectAtIndex:i];

            for(int i=0;i<[enhanc count];i++){
                [labelText appendAttributedString:[self getStyledString2:[NSString stringWithFormat:@" %@\n", [enhanc objectAtIndex:i]]]];
            }

            l4.attributedText = labelText;
        }


    } else if(indexPath.section==(sectionCount-1)){

        cellIdentifier =@"SplitCell";
        cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }
        UILabel *l1 = (UILabel*)[cell viewWithTag:1];
        UILabel *l2 = (UILabel*)[cell viewWithTag:2];

        if(indexPath.row==0){

            l1.attributedText = [self getStyledString1:@"Room Charges:"];
            l2.attributedText = [self getStyledString:[NSString stringWithFormat:@"£ %@", self.s_priceOfRooms]];
        }else if(indexPath.row==1){

            l1.attributedText = [self getStyledString1:@"Government Taxes:"];
            l2.attributedText = [self getStyledString:[NSString stringWithFormat:@"£ %@", govtTaxes]];
        }else if(indexPath.row==2){

            l1.attributedText = [self getStyledString1:@"Enhancement Total:"];
            l2.attributedText = [self getStyledString:[NSString stringWithFormat:@"£ %@", enhancementTotal]];
        }else if(indexPath.row==3){

            l1.attributedText = [self getStyledString1:@"Total Charges"];
            l2.attributedText = [self getStyledString:[NSString stringWithFormat:@"£ %@", grandTotal]];
        }



    }
    return cell;


}


-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    sectionCount = (int)[sectionArray count];
    return sectionCount;
}

-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {

    view.tintColor = GOLDEN_COLOR;

}

-(NSAttributedString*)getStyledString:(NSString*)input {
    NSAttributedString *str = [[NSAttributedString alloc] initWithString:input attributes:@{NSForegroundColorAttributeName:GOLDEN_COLOR, NSFontAttributeName:ARIAL_FONT}];
    return str;
}

-(NSAttributedString*)getStyledString1:(NSString*)input {
    NSAttributedString *str = [[NSAttributedString alloc] initWithString:input attributes:@{NSFontAttributeName:ARIAL_FONT_BOLD}];
    return str;
}

-(NSAttributedString*)getStyledString2:(NSString*)input {
    NSAttributedString *str = [[NSAttributedString alloc] initWithString:input attributes:@{NSFontAttributeName:ARIAL_FONT}];
    return str;
}

我制作了一个 ViewController 并在其中添加了一个 TableView 。一些数据填充在单元格中然后显示。 当我运行它时,最初我在我的单元格中看不到任何数据。但是当表格 View 滚动时,单元格开始显示实际数据。我不明白可能是什么原因。有什么指点吗???

我想动态调整单元格的大小,因为数据的大小可以是随机的。数据仅在滚动一次后显示。

最佳答案

此问题与使用 UITableViewAutomaticDimension 有关,并且已在其他地方报告过。所以这行代码解决了我的问题:

-(void)viewDidAppear:(BOOL)animated {
    [self.tableView reloadData];
}

这只是在显示之前重新加载所有表格部分和行。所以用户不会遇到空白行。引用:http://www.appcoda.com/self-sizing-cells/

关于ios - TableView 单元格仅在滚动一次后显示实际数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38505598/

有关ios - TableView 单元格仅在滚动一次后显示实际数据的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  5. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  6. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  9. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  10. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

随机推荐