UIPickerView selectRow 未按预期工作

2024-06-20

我创建了一个UIPickerView它有两个组件,第一个组件 (A) 的行数固定为 13。另一个组件 (B) 的行数可变,具体取决于 (A) 中选择的行。

加载时UIPickerView我调用以下命令,以便我可以在两个组件中默认选择,但是我遇到的问题是只有组件 (A) 显示正确的值。组件 (B) 未显示正确的行集或正确的选择。

[picker selectRow:rowA inComponent:COMPONENT_A animated:YES];
[picker reloadAllComponents];
[picker selectRow:rowB inComponent:COMPONENT_B animated:YES];

我在调用此代码后尝试打印出以下内容,似乎打印出了正确的值,但是当选择器仅显示组件 (A) 时,显示了正确的值和选择。

NSLog(@"(A) - row selected: %i", [picker selectedRowInComponent:COMPONENT_A]);
NSLog(@"(A) - number of rows: %i", [picker numberOfRowsInComponent:COMPONENT_A]);

NSLog(@"(B) - row selected: %i", [picker selectedRowInComponent:COMPONENT_B]);
NSLog(@"(B) - number of rows: %i", [picker numberOfRowsInComponent:COMPONENT_B]);

有谁对如何调试这个问题或者可能是什么问题有任何想法?

Update

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 2;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch (component) {
        case COMPONENT_A:
        {
            return 13;
        }
        case COMPONENT_B:
        {
            NSInteger selectedRowIdx = [picker selectedRowInComponent:COMPONENT_A];

            switch (selectedRowIdx) {
                case A:   return 2;
                case B:   return 4;
                case C:   return 6;
                case D:   return 8;
                case E:   return 10;
                case F:   return 12;
                case G:   return 14;
                case H:   return 16;
                case I:   return 18;
                case J:   return 20;
                case K:   return 22;
                case L:   return 24;
                default:    return 1;
            }
        }
    }

    return -1;
}


#pragma mark UIPickerViewDelegate

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch (component) {
        case COMPONENT_A:
        {
            switch (row) {
                case A:   return @"A";
                case B:   return @"B";
                case C:   return @"C";
                case D:   return @"D";
                case E:   return @"E";
                case F:   return @"F";
                case G:   return @"G";
                case H:   return @"H";
                case I:   return @"I";
                case J:   return @"J";
                case K:   return @"K";
                case L:   return @"L";
                default:    return @"";
            }
        }
        case COMPONENT_B:
        {
            if (row == 0) {
                return @"";
            } else {
                return [NSString stringWithFormat:@"%i", (int)row];
            }
        }
    }

    return nil;
}

The pickerView似乎没有时间正常呼吸所以我建议你让viewDidLoad加载pickerView通常然后做你的事情-viewDidAppear:.

嗯...你想要animated:YES无论如何,再一次,这样做没有意义-viewDidLoad甚至-viewWillAppear

尝试这个:

-(void)viewDidAppear:(BOOL)animated
{
    [picker selectRow:rowA inComponent:COMPONENT_A animated:YES];

    //no point reloading all components, just B
    [picker reloadComponent:COMPONENT_B];

    [picker selectRow:rowB inComponent:COMPONENT_B animated:YES];
}

另外,你做的地方:

NSInteger selectedRowIdx = [self selectedRowInComponent:COMPONENT_A];

不应该是这样吗

NSInteger selectedRowIdx = [pickerView selectedRowInComponent:COMPONENT_A];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UIPickerView selectRow 未按预期工作 的相关文章

随机推荐

  • MongoDB 按数组内部元素分组

    我有一个文章列表 每篇文章都有一个数组属性 其中列出了其中提到的各个个人 id oid 52b632a9e4f2ba13c82ccd23 providerName The Guardian url http feeds theguardia
  • Django添加简单自定义字段——如何编写South Introspection规则

    我正在尝试将自定义字段添加到我的 Django 项目中 该项目使用South http south aeracode org 因此 我 第一次 尝试写南方的自省规则 http south aeracode org wiki MyFields
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • 如何处理分类中的低频样本?

    我面临一个文本分类问题 我需要将示例分类为 34 组 问题是 34组的训练数据大小不平衡 对于某些组 我有 2000 多个示例 而对于某些组 我只有 100 多个示例 对于一些小群体 分类准确率相当高 我想这些群体可能有特定的关键词来识别和
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • Kendo DataSource:如何在获取之前设置过滤器而不发送两个http请求

    环境 剑道版本 2013 1 319 数据源 productsDataSource new kendo data DataSource type odata transport read http www mydomain com odat
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • 在 appdelegate 中呈现多个模态视图

    我想在应用程序收到 application UIApplication application didReceiveRemoteNotification NSDictionary userInfo 中的每个推送消息后呈现一个 modalvi
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Visual Basic - 未将对象引用设置为对象的实例

    我在 VB Net 中收到以下错误 你调用的对象是空的 它在 For 循环末尾突出显示 Next 任何帮助都会很棒 Imports System IO Public Class LoginForm Dim Username As Strin
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • Haskell:从后面访问列表

    今天我开始学习Haskell 我对函数式语言有点陌生 而且我非常喜欢 Haskell 然而 我有一个关于它的设计的问题困扰着我 从我到目前为止的理解来看 访问列表后面的元素似乎比访问前面的元素要复杂得多 类似于xs x where xs a
  • Node.js:如何在检索数据(块)时关闭响应/请求

    我正在用 node js 构建一个应用程序 它加载多个页面并分析内容 因为 node js 发送块 所以我可以分析这些块 如果一个块包含例如索引 nofollow 我想关闭该连接并继续其余部分 var host example com to
  • 文件上传控件 OnChange 事件 JQuery

    我正在尝试使用 AJAX JQUERY 和 Net HTTPHandler 构建页面来上传文件 如下所示http dotnet dzone com news async file upload jquery and http dotnet
  • Asp.net错误无法加载文件或程序集[重复]

    这个问题在这里已经有答案了 可能的重复 计算机崩溃后 我的 Visual Studio 2010 将无法加载程序集 https stackoverflow com questions 4975455 after a computer cra
  • Vue:通过 CSS 选择组件的最简洁方法是什么?

    我有一个bar成分 它的使用方式如下
  • 获取元数据活动 ADF V2

    谁能解释一下 ADF V2 中新引入的获取元数据活动有什么用 实际上 learn microsoft com 中提供的信息不足以理解此 Activity 的用途 获取元数据活动的主要目的是 验证任何数据的元数据信息 当数据准备好 可用时触发
  • 更改项目名称

    Flutter项目的项目名称可以修改吗 项目名称是指您在创建 flutter 项目时提供的名称flutter create name 这取决于您想要实现的目标 如果您想更改手机菜单中显示的应用程序名称以及应用程序图标 则必须更改androi
  • UIPickerView selectRow 未按预期工作

    我创建了一个UIPickerView它有两个组件 第一个组件 A 的行数固定为 13 另一个组件 B 的行数可变 具体取决于 A 中选择的行 加载时UIPickerView我调用以下命令 以便我可以在两个组件中默认选择 但是我遇到的问题是只