Всплывающее окно UIPickerView (iphone) - PullRequest
0 голосов
/ 30 сентября 2011

Я создаю 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;
}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Представление выбора должно иметь источник данных для отображения данных и делегат для ответа на события.Обычно я бы определял контроллер как принимающий соответствующие протоколы UIPickerViewDelegate и UIPickerViewDataSource.Контроллер этого не делает, это может означать, что источник данных и делегат находятся внутри другого объекта.Вы должны проверить в построителе интерфейса, нажать на сборщик и посмотреть, что происходит с делегатом и источником данных.Если вы найдете другой класс, чем ваш контроллер, то здесь вы должны искать ошибку.Если вы нашли класс вашего контроллера, то проблема в том, что вы не реализовали методы для представления выбора, которое нужно заполнить.Для справки сборщик ищет как минимум методы источника данных:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

Удачи в охоте.

0 голосов
/ 30 сентября 2011
- (IBAction)showPicker:(id)sender;

эта функция не реализована в вашем файле .m вместо - (void) showPicker использует вышеупомянутое ...

и что за использование этого ...

- (void)done:(id)sender
...