单击UITextField时带有工具栏的UIPickerView



当用户单击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)];
}

年龄的局部声明隐藏实例变量

这意味着您已经定义了一个类变量已经使用的变量名(因此,在这种情况下,您可能已经在类中的某个位置声明了UITextField *age,但不能在该类中重用变量名age,因为编译器会将其与类变量混淆)。

类"PracticePickerViewController"未实现"UIActionsheetDelegate"协议。

您尚未将PracticePickerViewController设置为UIActionsheetDelegate。要做到这一点,您必须将界面标题(PracticePickerViewController.h)更改为:

@interface PracticePickerViewController : UIViewController <UITextFieldDelegate, UIActionsheetDelegate>{

不要忘记实现所需的委托方法!

最后,我强烈建议您查看ActionSheetPicker项目
它是一个插件类,具有您正试图实现的功能,因此您可以用它替换当前代码,也可以将其用作参考,以了解如何在UIPickerView中正确实现嵌入的ActionSheet。希望所有的帮助!

最新更新