0

嗨,任何人都可以帮我解决这个问题,我一直在研究关于这个主题的很多以前的问题,它们似乎有点复杂。我想设置一个选择器,该选择器在触摸具有称为 locationField 的 IBOutlet 的文本字段时进行动画处理。

我不想在我的故事板中添加选择器或工具栏和按钮,我宁愿以编程方式进行。

到目前为止,我有:

- (void)viewDidLoad
{
 //populate picker arrays
 locationPickerArray = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];


    actionSheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

    [actionSheet showInView:self.view];

    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,480,32)];
    [pickerToolbar sizeToFit];
    pickerToolbar.barStyle = UIBarStyleBlackTranslucent;

    NSMutableArray *barItems = [[NSMutableArray alloc] init];

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonSystemItemCancel target:self action:@selector(cancel_clicked:)];
    [barItems addObject:cancelBtn];

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [barItems addObject:flexSpace];

    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done_clicked:)];

    [barItems addObject:doneBtn];
    [pickerToolbar setItems:barItems animated:YES];
    [actionSheet addSubview:pickerToolbar];

    UIPickerView *picker = [[UIPickerView alloc] init];
    picker.frame = CGRectMake(0, 44, 320, 216);
    picker.delegate  = self;
    picker.dataSource = self;
    picker.showsSelectionIndicator = YES;
    [actionSheet addSubview:picker];
}

-(void)done_clicked:(id)sender
{
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
}

-(void)cancel_clicked:(id)sender
{
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
}

我对此有几个问题,它崩溃了:

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[DetailsS​​creenViewController numberOfComponentsInPickerView:]:无法识别的选择器发送到实例 0xb505be0”

这是什么意思?

我的最后一个问题是,当单击我之前创建的 iboutlet(位置字段)时,如何填充此选择器并将其分配给弹出窗口。

谢谢

4

1 回答 1

1

崩溃的原因是您已将 of 的实例分配DetailsScreenViewController为 thedataSourcedelegateof a UIPickerView,而没有实际实现这些协议的方法。任务在这里进行:

picker.delegate  = self;
picker.dataSource = self;

具体的崩溃告诉你你还没有实现协议numberOfComponentsInPickerView:的一部分。UIPickerViewDataSource实际上,您应该已经收到关于此的编译器警告。学习使用这些警告真的很有帮助!无论如何,要修复它,请为两种协议上的所有必需方法提供实现。实现的细节将取决于您的应用程序的需求。如果您仍然需要有关详细信息的帮助,请告诉我。

关于你的第二个问题,我想现在把 aUIPickerView放在里面UIActionSheet是一件事情。我以前从来没有需要这样做,但是这里有一个SO 问题,其中包含许多背景示例代码,不确定您是否已经阅读过该问题。但我认为你只想等待你真正想要让选择器打电话的时间

[actionSheet showInView:self.view];

我认为您可以通过一种UITextFieldDelegate方法来做到这一点,可能还有其他方法。稍后我将尝试对此进行一些实验并更新此帖子。

编辑: 如果您将视图控制器指定为您感兴趣的任何文本字段的代表,那么您可以实现此UITextFieldDelegate方法:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    [actionSheet showInView:self.view];
    return NO;
}

结束编辑

希望这会有所帮助,如果您有任何问题,请告诉我。

于 2012-09-03T17:27:27.697 回答