5

横向きでiPadの中央にポップオーバーを表示しようとしています。以下のコードでそれを行うことができますが、ストーリーボードにリンクされている「popOverViewController」に関連付けられているプロパティがありません。作業して編集できるように、絵コンテのビューにしたいです。サイズを変更して、iPadのフルビューの50%または75%に変更し、矢印を表示しないようにすることもできます...

どうぞ、何でもお役に立ちます。*更新されたコード....サイズを設定できるようになりました。しかし、まだ「popOverViewController」コンテンツが表示されません。

self.popOverViewController = [[PopOverViewController alloc]init];
self.popOver = [[UIPopoverController alloc]
                            initWithContentViewController:self.popOverViewController];
CGSize size = CGSizeMake(400.0,300.0);
[self.popOver setPopoverContentSize:size];
CGRect rect = CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/2, 1, 1);
[self.popOver presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES];
4

5 に答える 5

1

以下のコードをコピーして貼り付けるだけです

UIViewController *popovercontroller=[[UIViewController alloc] init];
UIView *popoverView=[[UIView alloc] initWithFrame:CGRectMake(312,390, 400, 344)];
popoverView.backgroundColor=[UIColor whiteColor];

popovercontroller.contentSizeForViewInPopover=CGSizeMake(400, 300);



UIDatePicker *pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 400, 0)];
[pickerView setTintColor:[UIColor blackColor]];
[pickerView addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];

pickerView.datePickerMode = UIDatePickerModeDate;
pickerView.hidden = NO;
NSString *bs ; //= [NSString alloc];
//    //NSDate *newDate = [NSData alloc];
bs =  CurrentSelectedDate;
if (bs.length >= 1) {
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
    //        //[dateFormatter setDateStyle:NSDateFormatterLongStyle];
    //        [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"];
    // NSDate *myDate = [dateFormatter dateFromString: txtText.text];
    pickerView.date = [dateFormatter dateFromString: CurrentSelectedDate];

}
else
{
    pickerView.date = [NSDate date];
}
[popoverView addSubview:pickerView];



// pickerView.date = [dateFormatter dateFromString:txtText.text];
UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 400, 44)];
pickerToolbar.barStyle = UIBarStyleDefault;
pickerToolbar.barTintColor=[UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f];

[pickerToolbar sizeToFit];
self.navigationController.toolbar.barTintColor = [UIColor colorWithRed:150.0f/255.0f green:91.0f/255.0f blue:129.0f/255.0f alpha:1.0f];
NSMutableArray *barItems = [[NSMutableArray alloc] init];

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

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
doneBtn.tintColor=[UIColor whiteColor];
[barItems addObject:doneBtn];

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
 cancelBtn.tintColor=[UIColor whiteColor];
[barItems addObject:cancelBtn];

[pickerToolbar setItems:barItems animated:YES];


[popoverView addSubview:pickerToolbar];
popovercontroller.view=popoverView;

pickerViewPopup = [[UIPopoverController alloc] initWithContentViewController:popovercontroller];

[pickerViewPopup presentPopoverFromRect:CGRectMake(312, 212, 400, 344) inView:self.view permittedArrowDirections:0 animated:YES];
于 2014-04-02T06:48:49.273 に答える
0

コンテンツが表示されない理由は、既にアウトレットに接続しているView Controllerを最初から明示的に再作成することにより、コンパイラは古い値を破棄することを想定し、作成されたViewControllerインスタンスIBを解放するためです。または、これが別のストーリーボードまたはXIBである場合、適切な初期化子はです-initWithNibName:bundle:。最初の行を省略/編集するだけで、コンセントが正しく接続されていると仮定すると、IBに何を入れたかがわかります。

于 2013-03-05T21:24:19.617 に答える
0

大丈夫。だから私はこれをしました...

popOverViewController =  [self.storyboard instantiateViewControllerWithIdentifier:@"popOver"];
于 2013-03-06T16:21:23.063 に答える
0

私はちょうどこれに取り組んできましたが、ストーリーボードでできるだけ多くのことをしたかったので、アプローチが少し変わりました:

1) ストーリーボードでポップオーバーを選択し、上/下/左/右の方向のチェックを外して、矢印を取り除きます。

画面オーバーライドの中央に配置するには、セグエの準備をして、次のようにします。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIStoryboardPopoverSegue* popover = (UIStoryboardPopoverSegue*)segue;
    CGFloat horizontalInset = (self.view.frame.size.width - popover.popoverController.popoverContentSize.width) / (CGFloat)2.0;
    CGFloat verticalInset = (self.view.frame.size.height - popover.popoverController.popoverContentSize.height) / (CGFloat)2.0;
    popover.popoverController.popoverLayoutMargins =
        UIEdgeInsetsMake(
            verticalInset,
          horizontalInset,
            verticalInset,
          horizontalInset);
}

私の場合、ポップオーバー セグエの角の半径が私のデザインと一致しないこともわかったので、背景色をクリアに変更して整理します。つまり、これを上記のブロックに追加します。

popover.popoverController.backgroundColor = [UIColor clearColor];

2) セグエの宛先コントローラーで、属性「ポップオーバー」を見つけ、「明示的なサイズを使用」にチェックマークを付け、ポップオーバー モードで表示するサイズを入力します。

于 2014-08-14T11:46:22.463 に答える