1

我的故事板中有一个 UIPickerView 。包含它的 UIViewController 设置了接口声明

@interface ContactDetail : UIViewController <ABPeoplePickerNavigationControllerDelegate, UIPickerViewDataSource, UIPickerViewDelegate,UIAlertViewDelegate, UITextFieldDelegate>

在视图加载,pickerview 委托集

pickerView_RelationshipType.dataSource=self;
pickerView_RelationshipType.delegate = self;
pickerView_RelationshipType.showsSelectionIndicator = YES;

所有 UIPickerView 数据源和委托方法都被触发,除了那些 2

pickerView:titleForRow:rowforComponent
and
pickerView:viewForRow:forComponent:reusingView

以下那些被调用,没问题

    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component
    - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
4

2 回答 2

4

里面有什么numberOfComponentsInPickerView

如果您numberOfRows返回 0,那么您的委托方法将永远不会被调用 - 如果选择器认为它没有任何要显示的行,它将不会询问行的标题。

于 2014-11-03T11:58:19.813 回答
3

确保您的数据源数组已分配和初始化。当一切都正确连接时,我遇到了这个问题(我设置了数据源和委托并且符合协议),但是我忘记在向它们添加对象之前初始化我的数据源数组。我的代码成功了numberOfComponentsInPickerViewnumberOfRowsInComponent但没有titleForRow,我不知道为什么。确保您的数据源没有返回 nil。

有点愚蠢的边缘案例,但我想我会添加我的答案,以防其他人遇到同样的问题。

于 2014-11-05T23:30:34.720 回答