2010-10-02 10 views
14

Chciałbym wiedzieć, aby dokonać UIPopoverController bez strzałki faktycznie Chciałbym symulować coś takiego: Screenshot of the set-passcode screen from the iPad's System PreferencesUIPopoverController bez strzałki?

zobaczyć, że

  • Nie ma strzałki

  • Nie jest tytułem, który jest w jakiś sposób wewnątrz rozwiniętej górnej granicy kontrolera UIPopoverController, a nie wewnątrz tego, jak w normalnym UIPopoverControllerze.

Przypuszczam nie jest to przedmiotem UIPopoverController ale chciałbym docenić rad, w jaki sposób mogę dokonać takiego samego efektu (używając CoreGraphics -> specjalnie półprzezroczysty efekt pogorszyć wybitnego granicy 3D) i/lub linki do niektórych źródeł, jeśli ktoś wcześniej to zrobił.

Z góry dziękuję.

Ignacio

EDIT:

ja wciąż szuka tych rzeczy i sobie sprawę, że nawet w aplikacjach firm trzecich jest używany Przykładem jest: Twitterrific dla iPada, jak widać na tym zdjęciu. Ktoś proszę? Umieszczenie tytułu w kontroleru popover jest po prostu brzydkie. alt text

Odpowiedz

4

Chociaż istnieją pewne pytanie o to, czy Apple będzie zatwierdzać aplikacje, które tworzą popover bez strzałki, może chcesz sprawdzić to post regarding arrows i ten post regarding modal views.

+0

Nie sądzę, że jest problem, jeśli nie są prezentowane żadne strzałki. Jak sugerujesz link, opcja jest dostępna, prawda? ;) Ale nadal nie wiem jak umieścić tytuł w kontroleru popover, jak na pokazanych zdjęciach. Próbowałem właściwości tytułu UIViewController, ale nie działa. – nacho4d

+0

Znalazłem rozwiązanie tutaj: http://stackoverflow.com/questions/2617409/setting-the-title-of-a-ipopovercontroller – nacho4d

1

Aby utworzyć okienko z tytułem, musisz utworzyć osobny widok, tak jak zrobiłbyś oddzielne okno, a następnie załadowałeś ten widok w okienku popover.

19

Poniższa metoda działa dobrze dla mnie (to iOS7)

[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20) 
            inView:self.view 
        permittedArrowDirections:NULL 
            animated:YES]; 
+2

+1, ale dla MonoTouch, użyj uint.MinValue zamiast "NULL", aby usunąć strzałka –

1

górna granica jest wytwarzany poprzez umieszczenie kontrolera nawigacji pomiędzy popover i prezentowanym kontrolera widoku.

Innymi słowy, popover przedstawia kontroler nawigacyjny, a kontroler widoku administratora kontrolera nawigacyjnego jest ustawiony na kontroler widoku. Spowoduje to utworzenie paska tytułu i pozwoli ustawić tytuł za pomocą [self setTitle:@"My Title"] i dodać przyciski nawigacyjne.

1

Możesz dodać tytuł za pomocą UINavigationController i dodając UIViewControllers do kontrolera nawigacji. Ustaw atrybut "title" kontrolera UIViewController, aby pojawił się tytuł.

Ustawienie kierunku strzałki na NULL, zgodnie z sugestią niektórych osób, może spowodować nieprzewidywalne zachowanie, ponieważ metoda wykorzystuje tę zmienną do określenia orientacji wyskakującego okienka względem elementu lub prostokąta przycisku paska.

Lepiej jest podklasować UIPopoverBackgroundView i ustawić różne metody powrotu strzałek, aby zwracały 0 dla strzałek (tylko iOS5 i nowsze).Zobacz ten przykład do sposobu podklasy to odpowiednio:

http://blog.teamtreehouse.com/customizing-the-design-of-uipopovercontroller

przykład prosta implementacja (MyCustomPopoverBGView jest podklasą UIPopoverBackgroundView w tym przykładzie):

UIViewController *vCtrlr = [[UIViewController alloc] initWithNibName:nil bundle:nil]; 
vCtrlr.title = @"My Title"; 
self.navCtrlr = [[UINavigationController alloc] initWithRootViewController:vCtrlr]; 
self.popCtrlr = [[UIPopoverController alloc] initWithContentViewController:_navCtrlr]; 
_popCtrlr.popoverBackgroundViewClass = [MyCustomPopoverBGView class]; 
      [_popCtrlr presentPopoverFromRect:CGRectMake(0, 
                 0, 
                 320, 
                 150) 
             inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
0

Wystarczy skopiować & Wklej poniższy kod

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

Zdanie 0 na permittedArrowDirections atrybut.

[popoverController presentPopoverFromRect:YOUR_RECT 
            inView:self.view 
        permittedArrowDirections:0 
            animated:YES]; 
Powiązane problemy