我已经以编程方式创建了一个条形按钮项目。但是取消和完成的相应方法并未触发。
我以编程方式将选择器视图添加为文本字段的输入视图。在选择器视图的顶部,我放置了一个带有完成和取消按钮的工具栏。工具栏是pickerview的子视图。

这是我的代码:

(void)awakeFromNib
{
    contactAgeRange = [[NSMutableArray alloc]init];
    for (int i = 18; i <= 100; i++)
    {
      [contactAgeRange addObject:[NSNumber numberWithInt:i]];
    }
    personGender = [[NSMutableArray alloc]initWithObjects:@"Male", @"Female", nil];
    [self initializePickerView];
    self.cellTextField.userInteractionEnabled = NO;
    self.cellTextField.delegate = self;

    UIToolbar *toolBar= [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,[UIScreen mainScreen].bounds.size.width,44)];
    [toolBar setBarStyle:UIBarStyleBlackOpaque];

    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:nil action:@selector(doneButtonPressed:)];
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:@selector(cancelButtonPressed)];
    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

    [toolBar setItems:[NSArray arrayWithObjects:cancelButton, space, doneButton, nil]];
    [self.pickerView addSubview:toolBar];
}

-(void) configureCell
{
    switch (self.cellType) {
         case ContactCellTypeAge:
             self.cellTextField.inputView = self.pickerView;
             break;

         case ContactCellTypeGender:
             self.cellTextField.inputView = self.pickerView;
             break;
       }
}

-(void)initializePickerView
{
    self.pickerView = [[UIPickerView alloc]init];
    self.pickerView.delegate = self;
    self.pickerView.dataSource = self;
    self.pickerView.showsSelectionIndicator = YES;
}

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

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
      switch (self.cellType)
      {
           case ContactCellTypeAge:
              return [contactAgeRange count];
              break;
           case ContactCellTypeGender:
              return [personGender count];
              break;

       }
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
      if (self.cellType == ContactCellTypeAge)
{
NSString *age = [[contactAgeRange objectAtIndex:row] stringValue];
return age;
}
else if (self.cellType == ContactCellTypeGender)
{
NSString *gender = [personGender objectAtIndex:row];
return gender;
}
return nil;
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if (self.cellType == ContactCellTypeAge)
{
pickerRowText  = [[contactAgeRange objectAtIndex:row] stringValue];
//self.cellTextField.text = pickerRowText;
}
else if (self.cellType == ContactCellTypeGender)
{
pickerRowText = [personGender objectAtIndex:row];
//self.cellTextField.text = pickerRowText;
//[self.cellTextField endEditing:YES];
}
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
 {
if (self.setNextResponderActionBlock)
 {
self.setNextResponderActionBlock();
}
return YES;
}

-(void) cancelButtonPressed
{
[self.cellTextField resignFirstResponder];
}

-(void) doneButtonPressed : (id)sender
{
if (self.cellType == ContactCellTypeAge)
{
self.cellTextField.text = pickerRowText;
}
if (self.cellType == ContactCellTypeGender)
{
self.cellTextField.text = pickerRowText;
}
 }


请帮我。提前致谢

最佳答案

在此方法中的configureCell添加self.cellTextField.inputAccessoryView = toolbar;

10-07 19:37
查看更多