2012-12-04 56 views
6

我需要添加一个toolbar完成按钮在UIPickerView的顶部。我不想使用actionSheet,因为我想让其余的视图处于活动状态。我已经走了下面的代码:工具栏在Xcode的UIPIckerView的顶部?

- (BOOL)textFieldDidBeginEditing:(UITextField *)textField { 
    [txtstate resignFirstResponder]; 
    pickerView = [[UIPickerView alloc]init] ; 
    pickerView.frame=CGRectMake(10, 75, 180,20); 
    pickerView.delegate = self; 
    pickerView.showsSelectionIndicator = YES; 

    UIToolbar* toolbar = [[UIToolbar alloc] init]; 
    toolbar.frame=CGRectMake(0,75,180,10); 
    toolbar.barStyle = UIBarStyleBlackTranslucent; 
    UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 


    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                     style:UIBarButtonItemStyleDone target:self 
                     action:@selector(doneClicked:)]; 


    [toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneButton, nil]]; 

    textField.inputAccessoryView = toolbar; 
    [pickerView addSubview:toolbar]; 
    [self.view addSubview:pickerView]; 
} 

通过使用上面的代码加到我的工具栏,但它是UIPickerView下隐藏,并在中间获取添加。我怎样才能让工具栏走到前面(在UIPickerView的顶部)?

+0

创建一个UIView,的框架UIView应该是UIPickerView的最高级别加上工具栏的最高级别,将视图中的UiPIckerView和工具栏添加为子视图并将视图添加到self.view中。 –

+0

chk我的答案在http://stackoverflow.com/questions/13524294/how-to-use-uipickerview-on-second-viewcontroller/13524698#13524698 – Rajneesh071

+0

@GiuseppeiPichy你可以告诉我如何?/ – Sindhia

回答

6

可以getPicker使用此

-(void)getValuePicker 
{ 
    ViewForValuePicker = [[UIView alloc]initWithFrame:CGRectMake(0, 219, 320, 266)]; 

    UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    toolBar.barStyle = UIBarStyleBlackOpaque; 

    UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneBtnPressToGetValue)]; 

    [toolBar setItems:[NSArray arrayWithObject:btn]]; 
    [ViewForValuePicker addSubview:toolBar]; 


    valuePicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, 320, 216)]; 
    valuePicker.delegate=self; 
    valuePicker.dataSource=self; 
    valuePicker.showsSelectionIndicator=YES; 

    [ViewForValuePicker addSubview:valuePicker]; 

    [appDelegate.window addSubview:ViewForValuePicker]; 
} 

而且其Delegete方法

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 
{ 
    return [pickerValueAry count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 
{ 
    NSMutableArray *ary = [[NSMutableArray alloc] initWithArray:pickerValueAry]; 
    id str=[ary objectAtIndex:row]; 
    return str; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{  
    NSLog(@"selectedRowInPicker >> %d",row); 
} 

您可以按照我在viewDidLoadLink

+0

@ zeevblu的方法要简单得多。我建议去那个。请注意,如果您使用的是键盘,请确保使用硬件键盘来切换'cmd-k' – kbpontius

-1

您可以设置您UIPickerView像这样: -

-(void)showPicker{ 


    menu = [[UIActionSheet alloc] initWithTitle:@"Select Time" 
             delegate:self 
           cancelButtonTitle:nil 
         destructiveButtonTitle:nil 
           otherButtonTitles:nil]; 

    pickerView=[[UIPickerView alloc] init]; 
    pickerView.frame= CGRectMake(0.0, 44.0, 0.0, 0.0); 
    pickerView.delegate=self; 
    pickerView.dataSource=self; 
    pickerView.showsSelectionIndicator = YES; 
    txtopsbox.inputView=pickerView; 

    dateTool = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 
    dateTool.barStyle=UIBarStyleBlackOpaque; 
    [dateTool sizeToFit]; 
    NSMutableArray *barItems = [[NSMutableArray alloc] init]; 
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DatePickerDoneClick)]; 
    [barItems addObject:flexSpace]; 

    UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelClicked:)]; 

    [barItems addObject:cancel]; 


    [dateTool setItems:barItems animated:YES]; 
    [menu addSubview:dateTool]; 
    [menu addSubview:pickerView]; 
    [menu showInView:self.view]; 
    [menu setBounds:CGRectMake(0,0,320, 464)]; 
    [pickerView release]; 

    } 

UPDATE

你也可以像喜欢另一种方法: -

- (IBAction)showPicker 
    { 
     if(pickerVisible == NO) 
     { 
      // create the picker and add it to the view 
      if(self.datePicker == nil) self.datePicker = [[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 460, 320, 216)] autorelease]; 
      [self.datePicker setMaximumDate:[NSDate date]]; 
      [self.datePicker setDatePickerMode:UIDatePickerModeDate]; 
      [self.datePicker setHidden:NO]; 
      [self.view addSubview:datePicker]; 

      // the UIToolbar is referenced 'using self.datePickerToolbar' 
      [UIView beginAnimations:@"showDatepicker" context:nil]; 
      // animate for 0.3 secs. 
      [UIView setAnimationDuration:0.3]; 

      CGRect datepickerToolbarFrame = self.datePickerToolbar.frame; 
      datepickerToolbarFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
      self.datePickerToolbar.frame = datepickerToolbarFrame; 

      CGRect datepickerFrame = self.datePicker.frame; 
      datepickerFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
      self.datePicker.frame = datepickerFrame; 

      [UIView commitAnimations]; 
      pickerVisible = YES; 
     } 
    } 

    - (IBAction)done 
    { 
     if(pickerVisible == YES) 
     { 
      [UIView beginAnimations:@"hideDatepicker" context:nil]; 
      [UIView setAnimationDuration:0.3]; 

      CGRect datepickerToolbarFrame = self.datePickerToolbar.frame; 
      datepickerToolbarFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
      self.datePickerToolbar.frame = datepickerToolbarFrame; 

      CGRect datepickerFrame = self.datePicker.frame; 
      datepickerFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
      self.datePicker.frame = datepickerFrame; 
      [UIView commitAnimations]; 

      // remove the picker after the animation is finished 
      [self.datePicker performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.3]; 
     } 
    } 
+0

但我不想使用actionsheet。我需要将整个视图变为活动状态。因此,我已经去了没有行动表 – Sindhia

+1

这可能是一个很好的答案,但答案的作者没有读过这个问题,该帖子的作者问:我不想要使用行动表 –

3

答案只需添加此代码,当textFieldBegin只是改变帧像波纹管......

首先创建全局UIView对于日期选取器的查看.h文件类似波纹管..

UIView *viewPicker; 
UIPickerView * pickerView; 

,然后使用它像波纹管..

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    viewPicker.frame = CGRectMake(0, 112, 320, viewPicker.frame.size.height); 
    [UIView commitAnimations]; 
    return YES; 
} 

添加此娄代码...

viewPicker = [[UIView alloc]initWithFrame:CGRectMake(0, 480, 320, 258)]; 
    UIToolbar* toolbar = [[UIToolbar alloc] init]; 
    toolbar.frame=CGRectMake(0,0,320,44); 
    toolbar.barStyle = UIBarStyleBlackTranslucent; 
    UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 


    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                    style:UIBarButtonItemStyleDone target:self 
                    action:@selector(doneClicked:)]; 


    [toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneButton, nil]]; 
    pickerView = [[UIPickerView alloc]init] ; 
    pickerView.frame=CGRectMake(0, 44, 320,216); 
    pickerView.delegate = self; 
    pickerView.showsSelectionIndicator = YES; 

    [viewPicker addSubview:pickerView]; 
    [viewPicker addSubview:toolbar]; 
    [self.view addSubview:viewPicker]; 

,并完成按钮单击了刚刚重新设置帧这样的..

-(IBAction)doneClicked:(id)sender 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    viewPicker.frame = CGRectMake(0, 370, 320, 258); 
    [UIView commitAnimations]; 
} 

我希望这可以帮到你...

+0

我必须通过addsubview将工具栏添加到我的选取器视图。感谢您的建议。只是做inputAccessoryView是不够的。我禁用了我的textInput,只显示选择器。 – LevinsonTechnologies

1

你可以试试这个代码:

- (BOOL)textFieldDidBeginEditing:(UITextField *)textField { 
    [textField resignFirstResponder]; 

    UIView *view = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 180, 260)]; 

    pickerView = [[UIPickerView alloc]init] ; 
    pickerView.frame=CGRectMake(0, 44, 180,216); 
    pickerView.delegate = self; 
    pickerView.showsSelectionIndicator = YES; 

    UIToolbar* toolbar = [[UIToolbar alloc] init]; 
    toolbar.frame=CGRectMake(0,0,180,44); 
    toolbar.barStyle = UIBarStyleBlackTranslucent; 
    UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 


    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" 
                    style:UIBarButtonItemStyleDone target:self 
                    action:@selector(doneClicked:)]; 


    [toolbar setItems:[NSArray arrayWithObjects:flexibleSpaceLeft, doneButton, nil]]; 

    textField.inputAccessoryView = toolbar; 

    [view addSubview:toolbar]; 
    [view addSubview:pickerView]; 
    [self.view addSubview:view]; 

    return YES; 
} 
+0

Excellant !!!!! –

24

有 您可以将选取器为您的文本字段 的inputView和工具栏为inputAccessoryView添加到您的文本字段 像一个简单的方法:

textField.inputView = pickerView; 
textField.inputAccessoryView = toolBar; 
+0

你让我的一天!谢谢。 –

+0

这对我来说很有魅力!谢谢 –

+0

这应该是被接受的答案 – PersuitOfPerfection

相关问题