2011年1月8日

[iPhone]如同keyborad滑出的datepicker



我要做一個點選table
cell
之後,會像鍵盤一樣滑出的datepicker



首先我先在要顯示datepicertableview類別的.h檔中宣告了一個UIDatePicker的變數
UIDatePicker *datepicker;//代表datepicker的物件


並定義他的property
@property (nonatomic,retain) UIDatePicker *datepicker;


接下來到tableview.m檔當中synthesize
@synthesize datepicker;


要記得在最後要把這個變數release
- (void)dealloc
{
[datepicker release];
[super dealloc];
}


同時我們要定義一個記錄datepicker狀態的bool變數,用來記錄datepicker下一次要顯示還是隱藏
BOOL datepickerShow;
在 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath 
這個function中,初始化datepicker
NSInteger row = [indexPath row];
switch (row)
{
  case 0:
  if (datepicker == nil)
  //
如果datepicker還沒定義要先初始化
  {
    self.datepicker 
          [[UIDatePicker alloc]initWithFrame:CGRectMake(0.0,367,320,216)];
    //決定datepicker的初始位置,因為在我的程式裡有tabbar,因此我設定y值為367


    [self.view addSubview:datepicker];//datepicker物件加入目前的view
    datepickerShow= YES;//把狀態初始化成yes
   }
[self showDatepicker:datepickerShow];
//呼叫顯示datepickerfunction,會依照目前datepicker狀態來決定要顯示或隱藏
  break;

case 1:
[self showDatepicker:NO];//點選其他行datepicker會隱藏
  break;

case 2:
[self showDatepicker:NO];//點選其他行datepicker會隱藏
  break;
default:
  break;
}




最後加入顯示datepickerfunction
- (void)showDatepicker:(bool)show
{
 CGRect startRect = CGRectMake(0.0,367,320,216);//定義datepicker開始的位置(view外面)
 CGRect endRect = CGRectMake(0.0,171,320,216);//定義datepicker結束的位置(view裡面)
 [UIView beginAnimations:nil context:NULL];
 [UIView setAnimationCurve:5];
 if(YES==show) //若要顯示,要從view外面移進裡面
   [datepickersetFrame:endRect];
 else//view裡移到外面
   [datepicker setFrame:startRect];
 [UIView commitAnimations];
 datepickerShow =!show;//變更狀態
}




這樣就完成我們的滑動datepicker

沒有留言: