0

こんにちは、誰でもこれを手伝ってもらえますか? この件に関する以前の質問をたくさん見てきましたが、少し複雑に思えます。locationField と呼ばれる IBOutlet を持つテキスト フィールドに触れるとアニメーション化するピッカーをセットアップしたいと考えています。

ピッカーやツールバー、ボタンをストーリー ボードに追加したくないので、プログラムで行いたいと思います。

これまでのところ、私は持っています:

- (void)viewDidLoad
{
 //populate picker arrays
 locationPickerArray = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5", nil];


    actionSheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

    [actionSheet showInView:self.view];

    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0,480,32)];
    [pickerToolbar sizeToFit];
    pickerToolbar.barStyle = UIBarStyleBlackTranslucent;

    NSMutableArray *barItems = [[NSMutableArray alloc] init];

    UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonSystemItemCancel target:self action:@selector(cancel_clicked:)];
    [barItems addObject:cancelBtn];

    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
    [barItems addObject:flexSpace];

    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(done_clicked:)];

    [barItems addObject:doneBtn];
    [pickerToolbar setItems:barItems animated:YES];
    [actionSheet addSubview:pickerToolbar];

    UIPickerView *picker = [[UIPickerView alloc] init];
    picker.frame = CGRectMake(0, 44, 320, 216);
    picker.delegate  = self;
    picker.dataSource = self;
    picker.showsSelectionIndicator = YES;
    [actionSheet addSubview:picker];
}

-(void)done_clicked:(id)sender
{
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
}

-(void)cancel_clicked:(id)sender
{
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];
}

これについていくつか質問があります。クラッシュします:

*キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[DetailsS​​creenViewController numberOfComponentsInPickerView:]: 認識されないセレクターがインスタンス 0xb505be0 に送信されました'

これは何を意味するのでしょうか?

私の最後の質問は、以前に作成した ioutlet がクリックされたときに、このピッカーにデータを入力してポップアップに割り当てる方法です (場所フィールド)。

ありがとうございました

4

1 に答える 1

1

クラッシュの理由は、これらのプロトコルのメソッドを実際に実装せずにDetailsScreenViewControllerおよびdataSourcedelegateインスタンスを割り当てたことが原因です。UIPickerView割り当ては次の場所で行われます。

picker.delegate  = self;
picker.dataSource = self;

特定のクラッシュは、プロトコルnumberOfComponentsInPickerView:の一部である を実装していないことを示しています。UIPickerViewDataSource実際には、これについてコンパイラの警告が表示されるはずです。これらの警告を使用することを学ぶことは本当に役に立ちます! とにかく、それを修正するには、両方のプロトコルで必要なすべてのメソッドの実装を提供してください。実装の詳細は、アプリのニーズによって異なります。詳細についてまだサポートが必要な場合は、お知らせください。

2 番目の質問については、a のUIPickerView中に aを入れるUIActionSheetことは今や問題だと思います。私はこれまでそれを行う必要はありませんでしたが、ここにいくつかの背景用のサンプルコードがたくさんあるSO の質問があります。まだ読んだことがあるかどうかはわかりません。しかし、実際にピッカーに呼び出しを表示したい時まで待ちたいと思います

[actionSheet showInView:self.view];

メソッドでこれを行うことができると思いますがUITextFieldDelegate、おそらく他の方法があります。後でそれを使っていくつかの実験を行い、この投稿を更新しようとしています。

編集: 関心のあるテキスト フィールドのデリゲートとしてビュー コントローラーを割り当てる場合は、次のUITextFieldDelegateメソッドを実装できます。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    [actionSheet showInView:self.view];
    return NO;
}

編集終了

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-09-03T17:27:27.697 に答える