Ios 如何从uitableviewcell显示uidatepicker

Ios 如何从uitableviewcell显示uidatepicker,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,如何从UITableViewCell中显示UIDatePicker,并使datepicker的顶部有一个工具栏供您使用?有关于如何执行此操作的好教程吗?您可以在UITableViewCell中放置一个不可见的UITextField,并将UITextFields inputview设置为UIDatePicker。下面是代码: yourdatePicker = [[UIDatePicker alloc]init]; yourtextField.inputView = yourdatePicker

如何从UITableViewCell中显示
UIDatePicker
,并使
datepicker
的顶部有一个工具栏供您使用?有关于如何执行此操作的好教程吗?

您可以在UITableViewCell中放置一个不可见的UITextField,并将UITextFields inputview设置为UIDatePicker。下面是代码:

 yourdatePicker = [[UIDatePicker alloc]init];
 yourtextField.inputView = yourdatePicker;

我正在使用ActionSheetPicker[1]。它允许您从部分与当前场景重叠的动作表中显示任何类型的选择器。此外,还可以在视图顶部添加按钮(如“取消”或“今天”)和标题

[1] :Tim Cinel的原始版本: Hari Karam Singh的改进:
修复了我的fork中的不赞成(我想现在它已经传播到了其他人中):

我最近不得不做完全相同的事情

  • UITextField
    插入
    UITableViewCell
    (您可能需要创建一个自定义的
    UITableViewCell
    ,具体取决于您希望它显示在
    UITableView
    的每个动态单元格还是单个静态单元格上)
  • UIDatePicker
    UIToolbar
    UITextField
    创建属性,然后在IB中将
    UITextField
    属性连接到步骤1中创建的
    UITextField
    (如果您使用的是自定义的
    UITableViewCell
    类,则需要使用
    UITextField
    属性):

  • 设置
    UIDatePicker
    UIToolbar
    UITextField

    - (void)viewDidLoad {
        // Initialise UIDatePicker
        datePicker = [[UIDatePicker alloc] init];
        datePicker.datePickerMode = UIDatePickerModeTime;
        [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; // method to respond to changes in the picker value
    
        // Setup UIToolbar for UIDatePicker
        datePickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];
        [datePickerToolbar setBarStyle:UIBarStyleBlackTranslucent];    
        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPicker:)]; // method to dismiss the picker when the "Done" button is pressed    
        [datePickerToolbar setItems:[[NSArray alloc] initWithObjects: extraSpace, doneButton, nil]];
    
    
        // Note: If you're using dynamic cells, the below 2 lines need to be in your cellForRowAtIndexPath method instead.
    
        // Set UITextfield's inputView as UIDatePicker    
        textField.inputView = datePicker;
        // Set UITextfield's inputAccessoryView as UIToolbar
        textField.inputAccessoryView = datePickerToolbar;
    }
    
  • 设置
    dismissspicker
    方法:

    -(void)dismissPicker:(id)sender{
        [textField resignFirstResponder];
    }
    
    - (void)datePickerValueChanged:(id)sender{
        NSDate *selectedDate = datePicker.date;
    
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"HH:mm"]; 
    
        [textField setText:[df stringFromDate:selectedDate]];
    }
    
  • 设置
    datePickerValueChanged
    方法:

    -(void)dismissPicker:(id)sender{
        [textField resignFirstResponder];
    }
    
    - (void)datePickerValueChanged:(id)sender{
        NSDate *selectedDate = datePicker.date;
    
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"HH:mm"]; 
    
        [textField setText:[df stringFromDate:selectedDate]];
    }
    

  • 注意:在我的代码中,我需要界面来显示时间,因此这里设置了日期格式(
    HH:mm
    )。因此,您还将注意到,在我的
    UIDatePicker
    视图加载中的初始化代码中,我已将其模式设置为
    UIDatePickerModeTime
    。对于日期选择,您可能希望将其设置为
    UIDatePickerModeDate

    ,这非常好,但您能否详细说明几件事。首先,我得到了这个选择器ror当我试图辞去日期选取者的职务时:-[uibarbuttoneim辞职FirstResponder]:无法识别的选择器,以及,您是否可以解释我将如何将textfields文本设置为用户设置的日期。它是否类似于textField.text=??@Auser Oops,请检查我的
    dismissPicker
    代码上的编辑。此外,我还添加了一个新方法的代码,以对
    UIControlEventValueChanged
    以及cod做出反应e在
    UIDatePicker
    上设置它。这是一个非常棒的人。谢谢你花时间来指导我。非常感谢。@Auser别担心,希望这对你和我一样有用!:)太棒了,我知道会的:]