在UIActionSheet上添加UIDatePicker后没有发生事件

时间:2012-04-10 19:07:02

标签: iphone

请查看代码

  -(IBAction)showDateSheet{
dateSheet=[[UIActionSheet alloc]initWithTitle:@"Select Test Date" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:nil];
datePicker=[[UIDatePicker alloc]init];
[datePicker addTarget:self action:@selector(changeDateInLabel:) forControlEvents:UIControlEventValueChanged];
dateSheet.delegate=self;
//[dateSheet setFrame:CGRectMake(0, 117, 320, 383)];
datePicker.datePickerMode=UIDatePickerModeDate;
CGRect pickerRect=datePicker.bounds;
pickerRect.origin.y=-100;
datePicker.bounds=pickerRect;
[dateSheet addSubview:datePicker];
[dateSheet showInView:self.view];
[dateSheet setBounds:CGRectMake(0.0f, 0.0f, 320, 500)];

//[datePicker release];
//[dateSheet release];

   }

通过使用上面的代码我无法点击取消按钮,当我点击取消按钮时没有任何反应

2 个答案:

答案 0 :(得分:1)

您的错误是如此设置datePicker的界限:

CGRect pickerRect=datePicker.bounds;
pickerRect.origin.y=-100;
datePicker.bounds=pickerRect;

基本上你所做的是移动选择器的位置,而不是选择器框架的位置。要更清楚地看到这一点,请将选择器的clipsToBounds属性设置为YES并查看您获得的内容。即使您未设置clipsToBounds,也无法与以下部分进行互动。

您实际想要做的是将帧原点向下设置,而不是将边界原点向上设置一定数量的点。工作代码看起来像这样:

CGRect pickerRect=datePicker.frame;
pickerRect.origin.y+=110;
datePicker.frame=pickerRect;

答案 1 :(得分:0)

你需要在Action Sheet上添加类似这样的按钮......

UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
closeButton.momentary = YES; 
closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
closeButton.tintColor = [UIColor blackColor];
[closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];
[dateSheet addSubview:closeButton];
[closeButton release];

这是在致电[dateSheet showInView:self.view];

之前完成的

然后在选择器中写下这个..

[actionSheet dismissWithClickedButtonIndex:0 animated:YES]