編集:デリゲートを割り当てるのを忘れました。現在は機能しています。
self.timePickerView.delegate = self;
self.timePickerView.dataSource = self;
わかりましたので、これを UIDatePicker で動作させ、正常に動作しましたが、秒を含めたかったので、カスタム ピッカーを試して使用する必要がありました。現在、アクション シートとボタンのポップアップが表示されますが、カスタム ピッカーがあるはずのスペースが真っ黒です。目標は、ユーザーがカスタムピッカーを使用して時間/分/秒を選択し、ランニングなどに費やした時間を記録することです.....
ここでの私の主な質問は、テキストフィールドがクリックされたときにカスタムピッカーを表示する方法です。ピッカー自体の実装に何かが欠けていることを知っています。おそらく、このカスタムピッカーはコンポーネント/行のデフォルトメソッドに従っていませんか? 以前使用していた日付が必要ないことを知っていますか?. 洞察をお寄せいただきありがとうございます。
ヘッダ
@property (strong, nonatomic) UIPickerView *timePickerView;
@property (strong, nonatomic) UIActionSheet *datePickerViewPopup;
@property (retain, nonatomic) NSMutableArray *hoursArray;
@property (retain, nonatomic) NSMutableArray *minutesArray;
@property (retain, nonatomic) NSMutableArray *secondsArray;
ビューがロードされました
NSString *stringValue = [[NSString alloc]init];
self.hoursArray = [[NSMutableArray alloc]init];
self.minutesArray = [[NSMutableArray alloc]init];
self.secondsArray = [[NSMutableArray alloc]init];
for (int i = 0; i < 61; i++) {
stringValue = [NSString stringWithFormat:@"%d", i];
if (i < 13) {
[self.hoursArray addObject:stringValue];
}
[self.minutesArray addObject:stringValue];
[self.secondsArray addObject:stringValue];
}
ポップアップを呼び出すセル
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
switch (textField.tag) {
case 1003:
[textField resignFirstResponder];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dateFormatter setDateFormat:@"HH:mm:ss"];
self.datePickerViewPopup = [[UIActionSheet alloc]init];
const CGFloat toolBarHeight = 44.0f;
self.timePickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, toolBarHeight, 0, 0)];
self.timePickerView.hidden = NO;
UIToolbar *pickerToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, toolBarHeight)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *toolBarItems = [[NSMutableArray alloc]init];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
[toolBarItems addObject:cancelButton];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[toolBarItems addObject:flexSpace];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[toolBarItems addObject:doneButton];
NSDateComponents *comps = [[NSDateComponents alloc]init];
comps.hour = [self.timePickerView selectedRowInComponent:0];
comps.minute = [self.timePickerView selectedRowInComponent:1];
comps.second = [self.timePickerView selectedRowInComponent:2];
NSCalendar *calerdar = [NSCalendar currentCalendar];
NSDate *cardioTime = [calerdar dateFromComponents:comps];
textField.text = [dateFormatter stringFromDate:cardioTime];
[pickerToolbar setItems:toolBarItems animated:NO];
[self.datePickerViewPopup addSubview:pickerToolbar];
[self.datePickerViewPopup addSubview:self.timePickerView];
[self.datePickerViewPopup showInView:self.view.superview];
[self.datePickerViewPopup setBounds:CGRectMake(0, 0, self.view.frame.size.width, 464)];
break;
}
}
ピッカーメソッド
#pragma mark - Picker Methods
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 3;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
if (component == 0) {
return [self.hoursArray count];
} else if (component == 1) {
return [self.minutesArray count];
} else {
return [self.secondsArray count];
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
switch (component) {
case 0:
return [self.hoursArray objectAtIndex:row];
break;
case 1:
return [self.minutesArray objectAtIndex:row];
break;
case 2:
return [self.secondsArray objectAtIndex:row];
default:
break;
}
return nil;
}