0

我已經創建了一個包含UIPickerViewUITableViewCell顯示當前在選擇器選擇的內容自定義視圖。我PickerViewController被設置爲兩個delegate和選擇器的dataSource,我已經實現了numberOfComponentsInPickerView:pickerView: numberOfRowsInComponent:,並且pickerView: titleForRow: forComponent:,但在程序運行時選擇器顯示爲空白,並感謝把NSLog調用的方法,我發現這些方法永遠不會被調用。我不知道是什麼問題,因爲選擇器似乎與PickerViewController正確鏈接。UIPickerViewDelegate方法沒有得到調用

對於我試圖實現的基本功能,請查看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; 
} 

回答

1

如果您numberOfRows ...數據源方法返回0,那麼你的委託方法將不會被調用 - 機械手不會要求行的標題,如果它不「T認爲它有任何行顯示。

相關問題