• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 将数据加载到 UIPIckerView?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:48:55 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试构建一个与 PDF 数据库一起工作的应用程序。我需要让应用程序查看所有存储的文件(PDF)并将某些文件拉出,对照数据库检查,然后显示 UIPicker< 上可用的 PDF 列表

我的第一步是应用程序检查文件并创建一个选择器轮盘,该轮盘已填充了目录中有数据的国家/地区。

为了完成这项工作,我为文件名创建了一个标准格式:“Country-Airfield-Plate Name-Date.pdf”,例如“英国-伦敦希思罗机场-ILS DME NDB 27-100214.pdf”。我首先在句号处拆分此文件名以获得两个字符串:“UK-London Heathrow-ILS DME NDB 27”和“pdf”,然后我们在连字符处拆分标题以获得“UK”、“London Heathrow” ' 和 'ILS DME NDB 27'。

应用程序将检查国家信息的第一个字符串,然后检查机场的第二个字符串,然后显示相应机场的第三个字符串的列表。

我如何首先从数据库中获取特定字段的数据,例如。 country 制作一个 NSArray 表单该数据并将该 NSArray 加载到 UIPickerView,然后在 UIPickerView 中使用该数组 DelegateDatasource 方法?



Best Answer-推荐答案


如果您没有任何 Web 服务运行并且您自己处理文档。您可以硬编码一个 .plist 文件并将其放在您的网站上,每次应用打开时下载这个小 plist 文件,加密并保存到您的文档目录。

plist 基本上是一个带有对象和键的 NSDictionary。 所以你的 plist 结构看起来像这样:

{
    Countries =     (
                {
            Airfields =             (
                                {
                    Code = JNB;
                    Plates =                     (
                                                {
                            Title = "late 1";
                            URL = "http://www.airport.com/za/airfield/plate1/document.pdf";
                        }
                    );
                    Title = "OR Tambo";
                }
            );
            Title = "South Africa";
        }
    );
}

上面的示例在每个数组中仅包含 1 个对象,在您的情况下会更多。

然后使用下面的 UIPickerView 委托(delegate)假设 button.tag 被调用来更改 pickerview.tag 并为 pickerview 显示正确的数组:

- (NSInteger)numberOfComponentsInPickerViewUIPickerView *)pickerView;
{
    return 1;
}

- (NSInteger)pickerViewUIPickerView *)pickerView numberOfRowsInComponentNSInteger)component;
{
    return [[self returnCorrectArrayForButton:pickerView.tag] count];
}

- (NSString *)pickerViewUIPickerView *)pickerView titleForRowNSInteger)row forComponentNSInteger)component
{
    return [[[self returnCorrectArrayForButton:pickerView.tag] objectAtIndex:row] valueForKey"Title"];
}

// Handle these errors where user can click on any button. Airfields will be empty if no country selected. Plates will be empty when no Airfields selected. After loading all arrays, pressing random buttons might give wrong information.

- (void)pickerViewUIPickerView *)pickerView didSelectRowNSInteger)row inComponentNSInteger)component
{
    if (pickerView.tag == 1) {

        _airfieldArray = [[_countryArray objectAtIndex:row] objectForKey"Airfields"];
        [_countryButton setTitle:[[_countryArray objectAtIndex:row] valueForKey"Title"] forState:UIControlStateNormal];

    } else if (pickerView.tag == 2) {

        _plateArray = [[_airfieldArray objectAtIndex:row] objectForKey"lates"];
        [_airfieldButton setTitle:[[_airfieldArray objectAtIndex:row] valueForKey"Title"] forState:UIControlStateNormal];

    } else if (pickerView.tag == 3) {

        // Show PDF in webview for selected plate
        [_plateButton setTitle:[[_plateArray objectAtIndex:row] valueForKey"Title"] forState:UIControlStateNormal];
        NSString *urlString = [[_plateArray objectAtIndex:row] valueForKey"URL"];
        NSLog(@"Selected Plate PDF URL : %@", urlString);
    }
}

- (NSArray *)returnCorrectArrayForButtonNSUInteger)buttonIndex
{
    if (buttonIndex == 1) {
        // Return Countries array
        return _countryArray;

    } else if (buttonIndex == 2) {
        // Return Airfield array
        return _airfieldArray;

    } else if (buttonIndex == 3) {
        // Return Plates array
        return _plateArray;
    }
    return nil;
}

关于ios - 将数据加载到 UIPIckerView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755475/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap