0

Мне нужно добавить сборщиков в свои текстовые поля, но не могу понять, как заставить их работать. Я провел ряд учебных пособий, которые показывают, как начать с нуля, что бесполезно, если у вас есть существующее приложение, и вы хотите добавить функциональность, по большей части, они не очень полезны.Как создать всплывающее uipicker и uitextfield для iOS 7?

Я ищу что-то очень похожее на изображение ниже. Один изображенные ниже, очевидно, UIDatePicker, но в идеале

Я ищу пользовательский сборщик на «место», «термин» и «ворота».

Итак, на данный момент пропустите пункт UIDatepicker, и сосредоточьтесь на пользовательском элементе выбора.

Еще одна вещь, это iOS7, и я использую раскадровки И дуги!

popup pickerview

Я натыкался на этот (http://www.youtube.com/watch?v=BtmQp5aP304), который был очень полезным, но опять же это, начиная с нуля. Я не могу понять, как реализовать это в моем существующем коде. Поэтому я ищу прогулку, учебник, на который кто-то может указать мне, чтобы я начал.

Существует этот на StackOverflow -> how to pop up datePicker when text filed click and disappear when editing done

Который дал мне несколько идей, но не совсем то, что я искал, пробовал предложения и в конечном итоге с большим количеством ошибок, чем что-либо еще ,

Спасибо.

ответ

4
@interface ViewController()<UIPickerViewDataSource,UIPickerViewDelegate> 

@implementation ViewController 
{ 
    UIPopoverController *popoverController; 
     NSString *currentPick; 
    …. 
} 
. 
. 
. 
-(void)makePicker{ 

UIPickerView *picker = [[[UIPickerView alloc]init]autorelease]; 
     picker.frame = CGRectMake(0, 50, 320, 1000); 
     picker.showsSelectionIndicator = YES; 
     picker.delegate = self; 
UIButton *done = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [done setBackgroundImage:[UIImage imageNamed:@"Save.png"] forState:UIControlStateNormal]; 
     [done setFrame:CGRectMake(260, 10, 50, 30)]; 
     [done addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside]; 
UIButton *cancel = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
     [cancel setBackgroundImage:[UIImage imageNamed:@"Cancel.png"] forState:UIControlStateNormal]; 
     [cancel setFrame:CGRectMake(10, 10, 50, 30)]; 
     [cancel addTarget:self action:@selector(cancelButton:) forControlEvents:UIControlEventTouchUpInside]; 


if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
    { 
     UIActionSheet *pickerAction = [[[UIActionSheet alloc]initWithTitle:[cells objectAtIndex:indexPath.section] delegate:self cancelButtonTitle:nil destructiveButtonTitle:Nil otherButtonTitles:nil]autorelease]; 
        [pickerAction addSubview:picker]; 
     [pickerAction addSubview:done]; 
     [pickerAction addSubview:cancel]; 
     [pickerAction showInView:self.view]; 
     pickerAction.frame = CGRectMake(0,[UIScreen mainScreen].bounds.size.height - 330,320, 350); 
    }else 
    { 
     UIViewController* popoverContent = [[UIViewController alloc] init]; 
     UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 300)]; 
     [popoverView addSubview:picker]; 
     [popoverView addSubview:done]; 
     [popoverView addSubview:cancel]; 
     [popoverContent.view addSubview:popoverView]; 
     popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
     [popoverController presentPopoverFromRect:<your frame> inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
     popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 260); 
     [popoverView release]; 
     [popoverContent release]; 

    } 
} 
. 
. 
. 

// mainArray here is a NSArray of several arrays, these arrays contain the titles for different selections… e.g. @[fontArray,colourArray,nameArray] 

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [[mainArray objectAtIndex:clickedAt] count]; 
} 

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
return [[mainArray objectAtIndex:clickedAt] objectAtIndex:row]; 
} 
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    currentPick = [[mainArray objectAtIndex:clickedAt] objectAtIndex:row]; 
} 


- (void)doneButton:(UIButton *)button 
{ 
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
{ 
    UIActionSheet *as = (UIActionSheet *)[button superview]; 
    [as dismissWithClickedButtonIndex:0 animated:YES]; 
} 
else 
    [popoverController dismissPopoverAnimated:YES]; 

// save your selections here using currentPick object 
} 

- (void)cancelButton:(UIButton *)button 
{ 
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) 
{ 
    UIActionSheet *as = (UIActionSheet *)[button superview]; 
    [as dismissWithClickedButtonIndex:0 animated:YES]; 
} 
else 
    [popoverController dismissPopoverAnimated:YES]; 
} 

Наслаждайтесь Picker;)

+0

благодарит за отзыв. Я знаю, где добавить представление делегата (в файле .h), но «реализовать количество компонентов»? какие компоненты? – MagicMiles

+0

- (NSInteger) numberOfComponentsInPickerView: (UIPickerView *) pickerView – nickAtStack

+0

numberOfComponentsInPickerView & numberOfRowsInComponent .. две требуемые функции для делегатов pickerView – nickAtStack

1

проверить это, сделать полный экран UIView, UIImageView, UIPickerView и два UIButtons (сохранить и отменяют) в .xib затем делают свои выходы в вашем .h файле:

@property (retain, nonatomic) IBOutlet UIView *bg_view; 
@property (retain, nonatomic) IBOutlet UIImageView *bg_customImageView; 
@property (retain, nonatomic) IBOutlet UIPickerView *myPicker; 
- (IBAction)cancelOut:(UIButton *)sender; 
- (IBAction)saveOut:(UIButton *)sender; 
@property (retain, nonatomic) IBOutlet UIButton *saveButton; 
@property (retain, nonatomic) IBOutlet UIButton *cancelButton; 

затем в .m файл:

-(void)customPickerShow 
{ 
[self.bg_view setBackgroundColor:[UIColor colorWithRed:0.3 green:0.25 blue:0.05 alpha:0.5]]; 
[self.bg_view setHidden:NO]; 
self.navigationController.toolbarHidden = YES; 
self.navigationController.navigationBarHidden = YES; 
[self showMyPicker]; 
} 

-(void)showMyPicker 
{ 
[self.myPicker reloadAllComponents]; 
[self animatePicker]; 
} 

-(void)animatePicker 
{ 
self.cancelButton.frame = CGRectMake((framewidth/2) - 130, frameheight, 70, 1); 
self.saveButton.frame = CGRectMake((framewidth/2) + 60, frameheight, 70, 1); 
self.bg_customImageView.frame = CGRectMake((framewidth/2) - 140, frameheight, 280, 1); 
[UIView beginAnimations:Nil context:Nil]; 
[UIView setAnimationDuration:0.3]; 
[UIView setAnimationDelegate:self]; 
self.bg_customImageView.frame = CGRectMake((framewidth/2) - 150, frameheight - 230, 300, 300); 
self.cancelButton.frame = CGRectMake((framewidth/2) - 130, frameheight - 220, 50, 50); 
self.saveButton.frame = CGRectMake((framewidth/2) + 80, frameheight - 220, 50, 50); 
[UIView commitAnimations]; 
} 


- (IBAction)cancelOut:(UIButton *)sender { 
self.navigationController.navigationBarHidden = NO; 
self.navigationController.toolbarHidden = NO; 
[self.bg_view setHidden:YES]; 
} 

- (IBAction)saveOut:(UIButton *)sender { 

// save here your selections 

self.navigationController.navigationBarHidden = NO; 
self.navigationController.toolbarHidden = NO; 
[self.bg_view setHidden:YES]; 
} 

называют это [само customPickerShow]; функция, чтобы заставить ее работать.

Это будет выглядеть как лист действий с подборщиком и кнопками.вы можете настроить по вашему выбору фонового изображения и ваш выбор кадра в функции animatePicker

Не забудьте сделать это bg_view на вершине других взглядов и сделать его sethidden по умолчанию

+0

Хмммм, я использую раскадровки. – MagicMiles

0

Чисто использование UIStoryboard, вероятно, не сможет ни решить проект, ни лучший способ. Это мое решение. 1) Создайте CustomPicker 2) Определите свой источник данных и делегат 3) Прикрепите CustomPicker к inputView целевого TextField. 4) вы можете установить его на делегат метода - (Bool) textFieldShouldBeginEditing: (UITextField *) TextField

При таком подходе мы добавим Picker кодирования его (не UIStoryboard).

У меня есть this demo project, чтобы показать эту цель.

Смежные вопросы