在iOS应用程序中使用UIPickerView时,不必采用数据源?

时间:2013-12-31 10:32:10

标签: ios objective-c uipickerview

从文档中看,当您使用UIPickerView类时,您必须采用UIPickerViewDelegateUIPickerViewDataSource协议。但是,即使我在我的程序中没有采用UIPickerViewDataSource,似乎我能够正确运行我的应用程序。例如,即使我编写以下代码:

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

,我既没有在我的头文件中采用UIPickerViewDataSource也没有在_myPickerView.datasource = self;方法中编写viewDidLoad,我可以成功运行我的应用,这意味着它在视图选择器中有两个组件。 (我接受了UIPickerViewDelegate并写了_myPickerView.delegate = self;。)

那么采用数据源是不必要的?如果是这样的话,为什么呢?我知道当我使用导航控制器时没有必要采用UITableViewDelegate,因为父类已经采用了协议 - 所以这是同样的原因吗?

为了您的信息,即使应用程序无需采用数据源,我也无法使用Xcode中的“方法名称预测功能”。

我从UIViewController继承了这个班级。我的Xcode版本是5.0.2。

感谢。

1 个答案:

答案 0 :(得分:0)

UIPickerViewDelegateUIPickerViewDataSource协议有两个不同的用途。 应该实现UIPickerViewDataSource协议,因为它提供了生成UIPicker所需的元数据(组件数,行数等)。

另一方面,

UIPickerViewDelegate协议处理UIPicker的任务,例如,选择器的值已更改,然后将调用委托方法。

需要实施

UIPickerViewDataSource协议,以便我们获得所需的选择器。 如果我们想在我们的选择器上实现一些基于事件的功能,则需要UIPickerViewDelegate

如果您没有实施UIPickerViewDelegate方法并设置picker.delegate = self,则应用会因为没有实施而崩溃。

如果您实施UIPickerViewDelegate方法并且未设置picker.delegate = self,那么应用程序将会运行,但应用程序不会响应选择器上的事件。

如果您没有实施UIPickerViewDataSource方法并设置picker.datasource = self,则应用会因为没有实施而崩溃。

如果您实施UIPickerViewDelegate方法并且未设置picker.datasource = self,那么应用程序将会运行,但选择器将显示为空,因为没有可用于生成选择器的元数据。