动画选择器在+完成按钮+ TextField更新

时间:2012-09-03 16:39:03

标签: objective-c ios uitextfield uipickerview uipicker

嗨,任何人都可以帮我解决这个问题,我一直在关注这个问题上的很多问题,看起来有点复杂。我想设置一个选择器,通过触摸一个名为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(位置字段)时,如何填充此选择器并将其分配给弹出窗口。

谢谢

1 个答案:

答案 0 :(得分:1)

崩溃的原因是您已将[{1}}的实例指定为DetailsScreenViewController的{​​{1}}和dataSource而未实际实施这些方法协议。作业在这里进行:

delegate

特定崩溃告诉您尚未实施UIPickerView picker.delegate = self; picker.dataSource = self; 协议的一部分。您应该已经收到编译器实际警告。学习使用这些警告可能非常有用!无论如何,要修复它,为两种协议提供所有必需方法的实现。实现的细节将取决于您的应用程序的需求。如果您仍然需要帮助,请告诉我们。

关于你的第二个问题,我想现在将numberOfComponentsInPickerView:置于UIPickerViewDataSource内。我之前从未需要这样做,但这里有一个SO question,其中有很多背景的示例代码,不确定你是否已经读过那个。但我想你只是想等待你真正想要给选择者打电话的时间

UIPickerView

我认为你可以用UIActionSheet方法做到这一点,可能还有其他方法。我稍后会尝试做一些实验并更新这篇文章。

修改 如果您将视图控制器指定为您感兴趣的任何文本字段的委托,那么您可以实现此[actionSheet showInView:self.view]; 方法:

UITextFieldDelegate

结束编辑

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