单击 UITextField 时带有工具栏的 UIPickerView
Posted
技术标签:
【中文标题】单击 UITextField 时带有工具栏的 UIPickerView【英文标题】:UIPickerView with toolbar when UITextField is clicked 【发布时间】:2012-07-11 01:49:05 【问题描述】:我试图在用户单击UITextField
时显示UIPickerView
。我还希望UIPickerView
在顶部有一个带有按钮的工具栏,用于提交选择和取消。
我需要在界面生成器中连接UIPickerView
,还是在其他地方连接动作?我在构建时也会收到警告。一个警告位于resignFirstResponder
下方。它说:
age
的局部声明隐藏了实例变量
对于不同的变量,还有几个类似于上述警告的警告。
另一个警告是:
“PracticePickerViewController”类未实现“UIActionsheetDelegate”协议。
这是我的.h
和.m
文件:
.h
#import <UIKit/UIKit.h>
@interface PracticePickerViewController : UIViewController <UITextFieldDelegate>
IBOutlet UITextField *age;
IBOutlet UIPickerView *agePickerView;
IBOutlet UIActionSheet *actionSheet;
IBOutlet UIToolbar *pickerToolbar;
@end
.m
#import "PracticePickerViewController.h"
@implementation PracticePickerViewController
-(void)textFieldDidBeginEditing:(UITextField *)age
[age resignFirstResponder];
actionSheet = [[UIActionSheet alloc] initWithTitle:@"Pick Your Age" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
[actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect pickerFrame = CGRectMake(0,40,0,0);
UIPickerView *agePickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
agePickerView.showsSelectionIndicator = YES;
agePickerView.dataSource = self;
agePickerView.delegate = self;
[actionSheet addSubview:agePickerView];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0,0,320,44)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[barItems addObject:doneBtn];
UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
[barItems addObject:cancelBtn];
[pickerToolbar setItems:barItems animated:YES];
[actionSheet addSubview:pickerToolbar];
[actionSheet addSubview:agePickerView];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0,0,320,485)];
【问题讨论】:
我认为这是ios
,对吧?
【参考方案1】:
年龄的局部声明隐藏实例变量
这意味着你定义了一个已经被类变量使用的变量名(所以在这种情况下,你可能在类的某个地方声明了UITextField *age
,但你不能重复使用变量名@987654323 @ 在此类中,因为编译器会将其与类变量混淆)。
“PracticePickerViewController”类未实现“UIActionsheetDelegate”协议。
您尚未将 PracticePickerViewController 设为 UIActionsheetDelegate
。为此,您需要将界面标题 (PracticePickerViewController.h) 更改为:
@interface PracticePickerViewController : UIViewController <UITextFieldDelegate, UIActionsheetDelegate>
不要忘记实现所需的委托方法!
最后,我强烈建议您查看ActionSheetPicker project。它是一个插入类,具有您想要实现的功能,因此您可以替换您的当前代码,或者仅将其用作参考,以查看如何正确实现 UIPickerView 内的嵌入式 ActionSheet。希望对您有所帮助!
【讨论】:
以上是关于单击 UITextField 时带有工具栏的 UIPickerView的主要内容,如果未能解决你的问题,请参考以下文章
带有 UITextfield 的 UItableView 到 NSMutableArray CRASH on Record 更新单击
单击按钮,将UITextField添加到UITableView
带有 UITextField 的 UITableView,滚动错误