Objective-c是否要求您为UIPickerView的每个实例使用不同的类

时间:2013-03-04 03:59:19

标签: xcode4.5 objective-c-2.0 uipickerviewcontroller

One of Three Search Pages in my app that run off of th Class SearchViewController

我有三个不同的搜索页面都在我的搜索视图控制器上运行。每个人都有不同的搜索方法,但屏幕基本相同。选择器中的选择将填充文本字段,lat和long是不断更新并显示在这些字段中的设备。我的问题是,要充分添加正确的数据并遵守UIPickerViewDelegate我是否需要添加三个类来运行这些选择器视图,或者是否允许在SearchViewController类中进行工作以定义PickerView?

1 个答案:

答案 0 :(得分:1)

允许(并且可能更好)使SearchViewController成为每个单独的UIPickverView的委托。请记住在SearchViewController的界面上包含<UIPickerViewDelegate>注释(如@interface SearchViewController : UIViewController <UIPickerViewDelegate>),如果您缺少任何必需的方法,编译器会帮助您提醒您;但是从6.1开始,UIPickerViewDelegate协议中没有必需的方法。

请注意,UIPickerViewDelegate协议中的每个方法都将UIPickerView作为其第一个参数。检查该参数以查看它是否与您的三个单独的UIPickerView中的每一个相等(并且它当然应该等于其中一个!)并根据需要修改每个视图的委托方法的行为。你最终会得到这样的代码:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if (pickerView == self.myFirstPickerView) {
        return self.myFirstSearchMethodResultTitles[row];
    } else if (pickerView == self.mySecondPickerView) {
        return self.mySecondSearchMethodResultTitles[row];
    } else if (pickerView == self.myThirdPickerView) {
        return self.myThirdSearchMethodResultTitles[row];
    } else {
        NSAssert(NO, @"Should not have reached this point!");
        return nil;
    }
}