【问题标题】:UIDatePicker DidSelectRow Method?UIDatePicker DidSelectRow 方法?
【发布时间】:2011-04-21 19:19:16
【问题描述】:

我知道 UIPickerViews 在选择一行时使用 didSelectRow 方法来更新标签等。

我有一个 UIDatePicker 可以在选择一行并按下完成按钮时更新标签,但我还想要一个随每个选择更新的 UILabel,因此它会随着用户更改日期而实时更新。虽然我找不到日期选择器的任何方法,例如 didSelectRow 。这怎么可能?

- (IBAction)dateButtonPressed
{
    [dateView setFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height)];
    [self.view addSubview:dateView];

    UIBarButtonItem *acceptButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismssPickerChangeDate)];
    self.navigationItem.rightBarButtonItem = acceptButton;
    [acceptButton release];

    UIBarButtonItem *cancelButton1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismssPickerCancel)];
    self.navigationItem.leftBarButtonItem = cancelButton1;
    [cancelButton1 release];

    self.navigationItem.title = @"Select Date";
    self.navigationItem.hidesBackButton = YES;
    [UIView animateWithDuration:.5 animations:^{
        [dateView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    }];
    NSDate *myDate = picker.date;

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    //NSDate *date = [NSDate date]; 
    [dateFormatter setDateFormat:@"MMM d y"]; 
    NSString *dateString = [dateFormatter stringFromDate:myDate]; 
    NSLog(@"New Date is = %@",dateString);
    dateLabel.text = dateString;
}

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    UIDatePicker 是一个 UIControl,所以使用

    [picker addTarget:yourController action:@selector(yourAction:) forControlEvents:UIControlEventValueChanged];
    

    向您的控制器发送消息。然后控制器可以获取日期选择器的状态并更新标签。

    如果你的选择器和你的标签都是同一个类的插座,在 viewDidLoad 中:

    [self.picker addTarget:self action:@selector(updateLabelFromPicker:) forControlEvents:UIControlEventValueChanged];
    

    然后创建 updateLabelFromPicker:

    - (IBAction)updateLabelFromPicker:(id)sender {
        self.label.text = [self.dateFormatter stringFromDate:self.picker.date];    
    }
    

    你需要一个 NSDateFormatter 来使日期更漂亮。

    【讨论】:

    • 谢谢特里,我对如何处理“你的控制器”有点困惑。我目前只有一个我想实时更新的 datePicker 和 dateLabel 的出口。
    • 我更新了更多细节。您在其中声明网点的类是您的控制器。
    • 我有所有的 NSFormatter 设置,因为我有另一个标签会在用户按下完成后更新,所以我只需要将它配置为实时。让我玩一下你发布的代码,谢谢。
    • 嗯我无法正确设置它,我将发布我在我的问题中使用的代码谢谢。
    • dateButtonPressed 方法是不是你在 addTarget:action:forControlEvents 中指定的方法?
    【解决方案2】:

    日期选择器的处理方式略有不同。来自文档:

    如果配置正确,UIDatePicker 对象会在用户完成旋转其中一个轮子以更改日期或时间时发送操作消息;关联的控件事件是 UIControlEventValueChanged。

    由于 UIDatePicker 继承自 UIControl,因此您可以访问您期望的所有各种触摸事件(TouchUpInside 等)。

    【讨论】:

      【解决方案3】:

      斯威夫特 3/4

      func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
       {
         println("\(courseCatalog[row])")
          yourlabelname.text=courseCatalog[row]
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多