我正在点击textField
时创建UIPickerView
。
当我运行此代码时出现错误:
Thread 1:Profram received signal:"SIGABRT"
。
我在iPhone开发方面很陌生,但负责人不在,我正在接受一个项目。
如果你能让我知道这有什么问题......
这就是ViewController.h
的样子:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
IBOutlet UIPickerView *picker;
IBOutlet UITextField *text;
}
- (IBAction)showPicker:(id)sender;
@end
和ViewController.m
:
#import "ViewController.h"
@implementation ViewController
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
- (void)showPicker {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelegate:self];
picker.center = CGPointMake(160, 240);
[UIView commitAnimations];
if (!self.navigationItem.rightBarButtonItem) {
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
[self.navigationItem setRightBarButtonItem:doneButton animated:YES];
// [doneButton release];
}
}
- (void)hidePicker {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];
[UIView setAnimationDelegate:self];
picker.center = CGPointMake(160, 240);
[UIView commitAnimations];
[self.navigationItem setRightBarButtonItem:nil animated:YES];
}
- (void)done:(id)sender {
[self hidePicker];
[self.navigationItem setRightBarButtonItem:nil animated:YES];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
[self showPicker];
return NO;
}
答案 0 :(得分:0)
- (IBAction)showPicker:(id)sender;
此函数未在.m文件中实现,而不是 - (void)showPicker使用上面的...
这有什么用......
- (void)done:(id)sender
答案 1 :(得分:0)
选择器视图必须具有数据源才能显示数据,并且委托者必须具有响应事件的委托。通常我会通过采用相应的协议UIPickerViewDelegate和UIPickerViewDataSource来定义控制器。您的控制器没有,这可能意味着数据源和委托在另一个对象中。您应该检查界面构建器,紧急选择选择器并查看他委派的内容和数据源。如果你发现另一个类而不是你的控制器,你应该在那里查找bug。如果找到控制器的类,那么问题是您没有实现要填充的选择器视图的方法。作为参考,选择器至少要查看数据源方法:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
祝你好运。