2

私は iPad アプリを構築しています。ユーザーがボタン (ToolBarItem ではなく通常のボタン) を押したときに uipickerview をポップアップしたいと考えています。通常、ツールバーからポップオーバー タイプの操作を行うことは理解していますが、この例では、標準のボタン クリックでそれを行う必要があります。私はかなりの検索を行いましたが、これは私が思いついたコードです (これはボタンクリックのコードです):

- (IBAction)showTagPicker:(id)sender {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select a Category" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil, nil];

[actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
CGRect frame = CGRectMake(0, 40, 320, 450);

PCCategory *categories = [[PCCategory alloc] init];
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:frame];
picker.delegate = categories;
picker.dataSource = categories;

UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 464)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];

NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                                                      target:self 
                                                      action:nil];
[barItems addObject:flexSpace];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                                                       target:self 
                                                       action:@selector(tagSelected)];
[barItems addObject:doneButton];

[pickerToolbar setItems:barItems animated:YES];
[actionSheet addSubview:pickerToolbar];
[actionSheet addSubview:picker];
[actionSheet showInView:self.view];
[actionSheet setBounds:CGRectMake(0, 0, 320, 464)];

}

これはポップオーバーでピッカー コントロールを作成しているように見えますが、コントロールは非常に小さく (約 1 行しか表示されません)、表示しているツールバー項目はどれもレンダリングされません。

写真を見る

サイズを制御するにはどうすればよいですか?作成中の 2 つの CGRect オブジェクトの値を微調整してみましたが、大きな違いはないようです。

4

1 に答える 1

0

そのような場合、私は常に UIPopoverController を使用します。必要なサイズのピッカーを使用してIBでビューを構築し、このビューをpopoverControllerに追加して、必要なもの(テキストフィールド、ツールバーなど)から表示できます。

UPD: コード例

UIViewController *vc = [UIViewController new];
vc.view = yourview; //With whatever you want in it
vc.contentSizeForViewInPopover = yourview.frame.size;
vc.navigationItem.title = @"Title"; // If you want one
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:vc];
popover presentPopoverFromRect:rect inView: self.view premittedArrowDirections:UIPopoverArrowDirectionAny animated: YES]; 
//rect is a frame from which you would like to present your popover. For example:  yourUIButton.frame
if (yourview.hidden)
     [yourview setHidden:NO];

別の解決策は、IB で新しい UIViewController を作成し、それをポップオーバー セグエにリンクすることですが、1 つのピッカービューだけでは複雑すぎると思います。

于 2012-05-10T06:38:30.697 に答える