工具栏中的栏按钮方法未调用

Posted

技术标签:

【中文标题】工具栏中的栏按钮方法未调用【英文标题】:Bar button methods in toolbar are not calling 【发布时间】:2015-12-29 04:14:49 【问题描述】:

我以编程方式创建了一个条形按钮项。但是取消和完成的各自方法都没有触发。 我正在以编程方式将选择器视图添加为文本字段的输入视图。在选择器视图的顶部,我放置了一个带有完成和取消按钮的工具栏。 Toolbar 是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;

 

请帮助我。提前致谢

【问题讨论】:

我没有尝试运行您的代码,但看起来(1)您的工具栏视图设置在选择器的某些子视图后面(UIPickerView 有很多内部工作正在进行),因此触摸事件没有到达它或者(2)您的视图控制器不是选择器的响应者链的一部分。在 (2) 的情况下,请在设置工具栏项时尝试将 target 设置为“self”而不是“nil”。 即使将目标设置为自我后,我也面临同样的问题 【参考方案1】:

configureCell在这个方法中添加self.cellTextField.inputAccessoryView = toolbar;

【讨论】:

感谢您的回复,但这是 xib 单元格。因此,当我将子视图添加到 xib 时,它会在我使用单元格的地方多次显示。顺便说一句,我怎样才能得到工具栏的高度。 我在表格视图中使用了 5 次单元格。在前两种情况下,我希望 pickerview 作为 xib 中文本字段的输入视图。 我不想点击单元格。我想单击单元格中的文本字段。所以不需要 didselectrow 方法 以上是我的单元格xib的完整代码,xib只包含一个标签和一个文本字段

以上是关于工具栏中的栏按钮方法未调用的主要内容,如果未能解决你的问题,请参考以下文章

无法单击工具栏上的栏按钮?

android 中都有哪些不同的栏(状态栏、操作栏、导航栏、工具栏等)?

Forge Viewer 中的个人工具栏按钮未出现

在 Mac Catalyst 项目中未调用 IBAction

在 Swift 中自定义栏按钮项

iOS/UIAutomation:如何将 isVisible() 用于第二个未标记工具栏中的按钮?