我以编程方式创建了 UIDatePicker 并让所选日期的 UILabel 显示,但未能使其正确显示
Posted
技术标签:
【中文标题】我以编程方式创建了 UIDatePicker 并让所选日期的 UILabel 显示,但未能使其正确显示【英文标题】:I created UIDatePicker programmatically and let the UILabel of the selected date show, but failed to let it show properly 【发布时间】:2016-02-25 20:55:11 【问题描述】:我尝试在没有情节提要的情况下创建UIDatePicker,并让所选日期的UILabel显示出来,但是当在模拟器上选择另一个日期时,标签显示为堆积起来。
- (void)viewDidLoad
[super viewDidLoad];
UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(10, 10,100,100)];
[self.view addSubview:myLabel];
UIDatePicker *myPicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
myPicker.datePickerMode = UIDatePickerModeDate;
[myPicker addTarget:self action:@selector(pickerChanged:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:myPicker];
- (void)pickerChanged:(id)sender
NSDateFormatter *df = [[NSDateFormatter alloc] init];
UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 300, 200, 200)];
df.dateFormat = @"yyyy/MM/dd HH:mm";
myLabel.text = [df stringFromDate:[sender date]];
[self.view addSubview:myLabel];
截图如下: http://i.stack.imgur.com/VnJbD.png
我是初学者,找不到解决方案。有人可以知道如何解决这个问题吗?提前谢谢你。
【问题讨论】:
【参考方案1】:这是因为您每次更改日期时都会创建一个新标签
你需要重用你的组件,在加载视图中创建它
- (void)viewDidLoad()
....
self.myLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 300, 200, 200)];
[self.view addSubview:self.myLabel];
那么你可以只设置文本:
- (void)pickerChanged:(id)sender
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"yyyy/MM/dd HH:mm";
self.myLabel.text = [df stringFromDate:[sender date]];
【讨论】:
【参考方案2】:先在viewDidLoad
中添加Label
UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 300, 200, 200)];
[self.view addSubview:self.myLabel];
然后在PickerChange
的标签中添加日期
self.myLabel.text = [df stringFromDate:[sender date]];
【讨论】:
谢谢!真的很不错。以上是关于我以编程方式创建了 UIDatePicker 并让所选日期的 UILabel 显示,但未能使其正确显示的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UIPopover 附加到以编程方式创建的 CGRect