工具栏中的栏按钮方法未调用
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 中都有哪些不同的栏(状态栏、操作栏、导航栏、工具栏等)?