0

我试图在用户单击aUIPickerView时显示 a 。UITextField我还希望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)];

}
4

1 回答 1

0

年龄的本地声明隐藏了实例变量

这意味着你已经定义了一个已经被类变量使用的变量名(所以在这种情况下,你可能已经UITextField *age在类的某个地方声明了,但是你不能在这个类中重用变量名age,因为编译器会混淆它与类变量)。

“PracticePickerViewController”类未实现“UIActionsheetDelegate”协议。

您还没有将您的 PracticePickerViewController 设置为UIActionsheetDelegate. 为此,您需要将界面标题 (PracticePickerViewController.h) 更改为:

@interface PracticePickerViewController : UIViewController <UITextFieldDelegate, UIActionsheetDelegate>{

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

最后,我强烈建议您查看ActionSheetPicker 项目
它是一个插入类,具有您要实现的功能,因此您可以用它替换当前代码,或者仅将其用作参考,以查看如何正确实现 UIPickerView 内的嵌入式 ActionSheet。希望所有这些都有帮助!

于 2012-07-11T03:32:53.003 回答