首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何制作一个只覆盖半个屏幕的模式日期选择器?

如何制作一个只覆盖半个屏幕的模式日期选择器?
EN

Stack Overflow用户
提问于 2011-12-13 11:58:34
回答 5查看 17.3K关注 0票数 18

我希望与iPhone联系人应用程序中的生日日期设置器具有相同的效果。如何让模式日期选择器只出现在屏幕的一半位置。

我希望日期选择器在UITableView上(就像在iphone联系人应用程序中)。我希望UITableView可以在日期选择器后面自由滚动(就像在iphone联系人应用程序中一样)。

提前谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-21 08:22:58

到目前为止,实现类似日期选择器/uipicker键盘的最佳方法是使用文本字段的输入视图属性:

  1. 构建一个简单的自定义UITableViewCell,其中包含一个UITextField (之所以重要,只是因为问题是关于在表视图中嵌入一个)

@ }

  • set pickerCell : UITableViewCell { UITextField *txtTextField;UIPickerView* dtpPicker;将TextField的inputview设置为UIPickerView (请确保已分配并初始化):

txtTextField.inputView =dtpPicker;

  • 你就快完成了。现在,当文本字段成为第一响应者(用户点击它)时,用户将看到一个选择器视图。只需填充您自己的值即可。或者使用日期选择器。

  • 您可以将选择器的委托/数据源设置为相同的单元格(如果它始终是生日单元格),或者让单元格的superview用数据加载它。无论您做出哪种选择,请确保更新上的txtTextField.text

行inComponent:(NSInteger)component:(UIPickerView*)行didSelectRow:(NSInteger)pickerView didSelectRow

祝好运!埃拉德。

票数 52
EN

Stack Overflow用户

发布于 2011-12-23 02:08:24

这就是我如何实现它的:我将UIDatePicker放在一个名为DateTimeEntryViewController的不同控制器中,当用户单击按钮/单元格以引入日期和时间时,我在UIViewController中执行以下代码:

代码语言:javascript
复制
self.alphaView = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.alphaView.opaque = NO;
self.alphaView.backgroundColor = [UIColor clearColor];
self.dateTimeEntryViewController.view.backgroundColor = [UIColor clearColor];

UIWindow *window = [[TTNavigator navigator] window];
[window addSubview:self.alphaView];
[window insertSubview:self.dateTimeEntryViewController.view aboveSubview:self.alphaView];

CGRect r = [_dateTimeEntryViewController.view frame];
r.origin.y = 480.0f;
[self.dateTimeEntryViewController.view setFrame:r]; 

[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:0.5f];
self.alphaView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
r.origin.y = 0;
[self.dateTimeEntryViewController.view setFrame:r];
[UIView commitAnimations];

因此,我基本上展示了视图控制器,它将UIDatePicker放在当前UIDatePicker的顶部。

票数 2
EN

Stack Overflow用户

发布于 2011-12-24 02:14:40

这段代码将添加一个日期选择器作为UITableView的子视图。这段代码假设我们是UITableViewController的子类。

我们将从底部开始设置拾取器的动画。最后,我们将挂钩到scrollViewDidScroll: delegate方法,以便在表格滚动时,选择器看起来保持不动。

在.h文件中,为选取器添加一个属性。

代码语言:javascript
复制
@property (strong, nonatomic) UIDatePicker *datePicker;

在您的.m文件中,我们添加了日期选择器。

代码语言:javascript
复制
- (void)viewDidLoad
{
  // Your own customization code.

    self.datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 200, 320, 216)];
    self.datePicker.hidden = YES;
    [self.datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:self.datePicker];
}

- (void)presentDatePicker
{
    if (self.datePicker.hidden == NO) { return; }

    // Set the date picker frame to be below the screen.
    self.datePicker.frame = CGRectMake(0, self.view.frame.size.height, self.datePicker.size.width, self.datePicker.size.height);
    CGRect originFrame = self.datePicker.frame;

    // Animate from the bottom.
    [UIAnimation animateWithDuration:.3 animations^{
      self.datePicker.frame = CGRectMake(0, 200, originFrame.size.width, originFrame.size.height);
    }];
}

#pragma mark - Scroll view delegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect tableBounds = self.tableView.bounds;
    CGRect datePickerFrame = self.datePicker.frame;

    self.datePicker.frame = CGRectMake(0, 200 + tableBounds.origin.y, datePickerFrame.size.width, datePickerFrame.size.height);
}

别忘了@综合你的属性并在viewDidUnload上发布它

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8484147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档