UIPickerView 委托和数据源方法没有被调用

Posted

技术标签:

【中文标题】UIPickerView 委托和数据源方法没有被调用【英文标题】:UIPickerView Delegate and DataSource methods not getting called 【发布时间】:2011-09-01 07:16:51 【问题描述】:

我想在单击按钮时显示 PickerView。 我有一个有 3 个按钮的视图。在按钮的相应操作中,我分配并初始化了pickerView,如下所示: pickerView = [[UIPickerView alloc]init]; 我也将 PickerView 添加到子视图中,如下所示: [self.view addSubview:pickerView];

我还使用 UIPickerViewDataSource 和 UIPickerViewDelegate 对我的类进行了子类化,如下所示: 我的类:UIViewController

通过 NSLoging,我看到 PickerView DataSource 和 Delegate 方法没有被调用。 当我单击(TouchUpInside)按钮时,视图显示了 origin=(0,0) 的 pickerView,它应该位于底部,并且 pickerView 显示为黑色。我使用以下方法修复了 PickerView 的框架: pickerView.frame = CGRectmake(0,180,320,260);

我用谷歌搜索来检查 pickerView 的 DataSource 和 Delegate 方法何时被调用,但我找不到正确的答案。

我还在这里尝试了“隐藏”属性,如下所示: 在 viewDidLoad 方法中: pickerView.hidden = YES; 在点击按钮后调用的方法中: pickerView.hidden = NO;

请帮帮我。我是 Objective C 的新手。

【问题讨论】:

【参考方案1】:

如果您以编程方式创建选择器 - 您是否真的设置了它的委托和数据源?

// Assuming that delegate and data source is controller where picker is created
pickerView.delegate = self;
pickerView.dataSource = self;

【讨论】:

完成。非常感谢。但是,如果我评论 picker.frame,pickerView 框架会出现在顶部。你能解释一下为什么会这样吗?也简单地将 PickerView 的 dataSource 和 Delegate 连接到 File's Owner 是否有用? @Krishna,如果您在 IB 中创建选择器,您可以在那里建立委托和数据源连接,但在您的示例中,您以编程方式创建它...默认情况下,选择器的框架将具有零来源,所以如果您想要要将其放置在您需要手动设置框架的其他位置 - 正如您所做的那样 如果使用 alloc/init 创建任何视图,默认情况下的矩形框架为零,但由于 UIPickerView 具有标准的预定义尺寸(至少是高度),在您的情况下,只有框架原点初始化为零 太好了。再次感谢你。此外,我已经在 Button 调用的方法中分配并初始化了 pickerView。所以这应该不是问题吧? @Krishna,是的,应该没问题。只要确保你释放你的选择器以避免内存泄漏。您可以在将其添加到 superview 后立即执行此操作

以上是关于UIPickerView 委托和数据源方法没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

即使我设置了数据源、委托,另一个视图的 UIPickerView 属性也没有显示

为 UIPickerView 创建委托和数据源

UIPickerView + TableViewCell + 委托和数据源

是否需要保留数据源的控制器和 uiPickerview 的委托?

无法分配 UIPickerView 委托或数据源

UIPickerView委托和数据源模板