0

テキストボックスにピッカーを追加する必要がありますが、ピッカーを機能させる方法がわかりません。ゼロから始める方法を示すチュートリアルをいくつか見てきましたが、既存のアプリがあり、機能を追加したい場合は役に立ちません。ほとんどの場合、あまり役に立ちません。

下の画像に非常に似たものを探しています。以下に表示されるものは明らかにUIDatepickerですが、理想的には

"place"、"term"、"gate" のカスタム ピッカーを探しています。

ここでは、UIDatepicker 項目をスキップして、カスタム ピッカー項目に注目してください。

もう1つ、これはiOS7で、ストーリーボードアークを使用しています!

ポップアップピッカービュー

私はこれ( http://www.youtube.com/watch?v=BtmQp5aP304 )に出くわしましたが、これは本当に役に立ちましたが、やはりゼロから始めています。私が理解できないのは、既存のコード内でこれを実装する方法です。だから私はウォークスルー、誰かが私を始めるために私を指し示すことができるチュートリアルを探しています.

これはstackoverflowにあります-> テキストフィールドがクリックされたときにdatePickerをポップアップし、編集が完了すると消える方法

これにより、いくつかのアイデアが得られましたが、探しているものとは正確には異なり、提案を試してみると、何よりも多くのエラーが発生しました。

ありがとう。

4

3 に答える 3

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];
}

ピッカーをお楽しみください ;)

于 2013-10-24T11:24:19.687 に答える
1

これを確認し、フルスクリーンのUIViewUIImageViewUIPickerView、および 2 つのUIButton (保存キャンセル) を .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];
}

これを[self customPickerShow] と呼びます。それを機能させる機能..

これは、ピッカーとボタンを備えたアクション シートのように見えます。背景画像を選択し、animatePicker 関数でフレームを選択してカスタマイズできます。

この bg_view を他のビューの上に置き、デフォルトで sethidden にすることを忘れないでください

于 2013-10-28T05:59:58.897 に答える