【问题标题】:UIPickerViewDelegate Methods Not Getting CalledUIPickerViewDelegate 方法没有被调用
【发布时间】:2012-06-08 19:57:50
【问题描述】:

我创建了一个自定义视图,其中包含一个UIPickerView 和一个UITableViewCell,以显示当前在选择器中选择的内容。我的PickerViewController被设置为选择器的delegate和dataSource,我已经实现了numberOfComponentsInPickerView:、pickerView: numberOfRowsInComponent:和pickerView: titleForRow: forComponent:,但是程序运行时选择器显示为空白,谢谢在方法中放置NSLog 调用,我发现这些方法永远不会被调用。我不知道问题是什么,因为选择器似乎与PickerViewController 正确链接。

对于我想要实现的基本功能,请查看 iOS 日历应用中的“开始和结束”视图。我试图完全模仿这一点,但只使用一个UITableViewCell 而不是三个。

PickerViewController.h

#import <UIKit/UIKit.h>

@interface PickerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITableViewCell *pickerSelection;
// Property to dynamically determine what content to display in the picker.
@property (nonatomic) BOOL userIsChoosingClass;

@end

viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(self.thePicker.delegate.description);
    if (self.userIsChoosingClass) {
        self.pickerSelection.textLabel.text = @"Class";
    } else {
        self.pickerSelection.textLabel.text = @"Major";
    }
}

选取器查看数据源方法

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

- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
    size_t numberOfRows = 0;

    if (self.userIsChoosingClass) {
        numberOfRows = [self.brain classChoicesForSignUp].count;
    } else {
        numberOfRows = [self.brain majorChoicesForSignUp].count;
    }

    return numberOfRows;
}

选取器视图委托方法

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
            forComponent:(NSInteger)component {
    NSLog(@"Picker view delegate method called");
    NSString *title;

    if (self.userIsChoosingClass) {
        title = [[self.brain classChoicesForSignUp] objectAtIndex:row];
    } else {
        title = [self.majorChoices objectAtIndex:row];
    }

    return title;
}

【问题讨论】:

    标签: objective-c ios uitableview uipickerview uipickerviewcontroller


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-13
      • 2014-06-02
      • 2011-08-28
      • 2017-02-24
      • 2015-02-23
      • 2013-12-19
      • 1970-01-01
      • 2020-09-19
      相关资源
      最近更新 更多