I am creating a textField
which when clicked UIPickerView
comes up.
When I run this code there is an error:
Thread 1:Profram received signal:"SIGABRT"
.
I am q开发者_StackOverflowuite new on iPhone development, but the person in charge is away and I am taking on a project.
If you could let me know what's wrong with this...
This is how the ViewController.h
looks like:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
IBOutlet UIPickerView *picker;
IBOutlet UITextField *text;
}
- (IBAction)showPicker:(id)sender;
@end
and 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;
}
- (IBAction)showPicker:(id)sender;
this function is not implemented in your .m file instead of -(void) showPicker use the above one...
and what is the use of this...
- (void)done:(id)sender
The picker view must have a data source to get the data to display and a delegate to respond to events. Typically I would define the controller as being both by adopting the corresponding protocols UIPickerViewDelegate and UIPickerViewDataSource. Your controller doesn't, this may mean that the data source and delegate are within another object. You should check in interface builder, tight click on the picker and see what comes up as being he delegate and data source. If you find another class than your controller that's where you should look for the bug. If you find your controller's class then the issue is you didn't implement the methods for the picker view to be populated. For reference the picker is looking at least for the data source methods :
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
Good luck for the hunting.
精彩评论