【问题标题】:display data from sqlite to label using FMDB使用 FMDB 从 sqlite 显示数据到标签
【发布时间】:2012-12-17 11:10:26
【问题描述】:

如何使用 FMDB 将 SQLite 中的数据显示到标签,如下所示:

我想以这种格式显示输出以供用户查看。没有互动。仅显示 select 查询。

【问题讨论】:

    标签: ios sqlite ios5 ios6 fmdb


    【解决方案1】:

    如果您想添加UILabel 对象,只需遍历您的结果集,为您的视图添加标签。比如:

    NSInteger rowNum = 0;
    NSArray *columnWidths = @[@(50), @(120), @(75), @(75)];
    CGFloat rowHeight = 24.0;
    
    FMResultSet *rs = [db executeQuery:sql];
    
    while ([rs next])
    {
        CGFloat x = 0.0;
        NSInteger colNum = 0;
        for (NSNumber *columnWidth in columnWidths)
        {
            UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x,
                                                                        rowHeight * rowNum, 
                                                                        [columnWidth floatValue], 
                                                                        rowHeight)];
            label.textAlignment = NSTextAlignmentCenter;
            label.layer.borderColor = [UIColor blackColor].CGColor;
            label.layer.borderWidth = 1.0;
            label.text = rs[colNum++];
            [self.view addSubview:label];
            x += [columnWidth floatValue];
        }
        rowNum++;
    }
    
    [rs close];
    

    我刚刚输入了它,所以我确定其中有拼写错误,但希望它足以让您了解它的外观。如果屏幕上放不下太多行,您可以在视图中添加一个滚动视图,然后将标签作为子视图添加到该视图中。

    我也认为 tableview 是一种很棒的方法。或者动态构建您在UIWebView 中显示的HTML 字符串。这里有很多选择。这在一定程度上取决于您的最终目标是什么、数据的性质以及您想要什么样的用户交互。

    【讨论】:

    • 谢谢先生。由于您正在硬编码单元格的宽度,如果文本长于单元格宽度应该做什么。即:无论如何,列宽可以根据插入的数据自动调整大小。再次感谢您的调查。跨度>
    • @JacobWood 再次,有很多选项,但是以编程方式添加UILabel 控件有点麻烦。也许遍历您的结果集一次,调用NSString 方法sizeWithFont 并以编程方式确定columnWidths 数组中所有列的最大宽度。或者,如果您构建了 HTML 表格,那么列宽会为您处理。
    • 没有与数据的交互,只是以上图提到的格式简单展示。
    • 这是个好主意,罗。我将实现上述代码并进行测试。再次感谢先生您的宝贵时间。祝您有美好的一天。
    【解决方案2】:

    您可以通过使用 UITableViewcustom UITableViewCells 来完成上述操作。

    您可以维护一个数组,作为视图控制器的数据源。

    考虑到您希望拥有与共享的布局相同的布局(每行有四个标签),您将从数据库中获取数据。

    由于从数据库中获取的数据可能会不断增加,UITableView 是显示长数据列表时的最佳选择,因为内存管理和单元格创建是自动处理的。

    如果您打算只使用标签,那么事情可能会为您棘手。因为如果您使用select 查询获取的行数过多,那么您最终会创建大量视图,这会导致内存问题。

    而且,如果您不希望您的用户与任何行进行交互,请实现以下方法:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
         [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
    

    这是创建自定义单元格的链接:

    http://www.appcoda.com/customize-table-view-cells-for-uitableview/

    这里是使用表格视图的链接:

    http://www.appcoda.com/ios-programming-tutorial-create-a-simple-table-view-app/

    祝你好运!!

    【讨论】:

    • 我不想只实现tableview标签,可以吗?您能否给我您发布的建议的链接。谢谢拉维。
    • 谢谢拉维。能否请您提供满足上述要求的源代码的链接。这将有很大帮助。因为我不知道如何继续上述要求。谢谢再次。
    • 不客气,希望对您有所帮助。如果您不打算实现表格视图,请考虑内存问题。
    • 谢谢先生,我猜 Rob 有最接近的答案。再次感谢,祝您有美好的一天。
    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 2018-05-29
    • 2012-03-11
    • 1970-01-01
    • 2012-02-02
    • 2014-12-05
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多