实现自定义时间UIPickerView弹出问题IOS



编辑:忘记分配委托了,现在可以工作了

    self.timePickerView.delegate = self;
        self.timePickerView.dataSource = self;

我让这个和一个UIDatePicker一起工作,它工作得很好,但是我想要包含秒,所以我不得不尝试使用一个自定义picker。现在我的动作表和按钮弹出,但我的自定义选择器应该是黑色的空间,我知道我错过了什么,或者只是采取了错误的方法。目标是让用户使用自定义选择器来选择一个小时/分钟/秒来记录他们在跑步等上花费的时间.....

我这里的主要问题是如何使我的自定义选择器出现时,文本字段被单击,我知道我在实现的选择器本身缺少一些东西,也许这个自定义选择器不遵循组件/行默认方法?我知道我以前用的约会用的不需要这些。谢谢你的建议。

@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;

view did load

       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;
}

您不需要创建操作表。只需创建UIPickerView并将其分配给文本字段inputView

我只是一个新手,我忘记在初始化选择器后添加以下内容。现在我只需要清理剩下的烂摊子。

    self.timePickerView.delegate = self;
        self.timePickerView.dataSource = self;

最新更新