我以编程方式创建了 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

在 iOS 14 中以编程方式打开 UIDatePicker

为啥我以编程方式创建的视图会忽略其约束?

为啥我以编程方式创建的按钮的样式不同?

我以编程方式创建的导航控制器不像示例中那样出现

从 InputAccessoryView 上的按钮更改 uidatepicker 的值