2011-01-17 4 views
1

Ich habe eine Anforderung, wo ich einen benutzerdefinierten Rahmen für UIPopoverController Popover-Ansicht anstelle der Standard "Black Theme" Grenze anzeigen muss. Ist es möglich?Entfernen Sie den Rahmen für UIPopoverController

Ich kann den standardmäßigen schwarzen Rahmen nicht verwenden, da er dem Farbschema der Anwendung nicht entspricht.

Im SDK gibt es dafür keine Bestimmung. Ich habe auch gegoogelt, um zu sehen, ob jemand anderes sich diesem Problem gestellt hat und ob sie es gelöst haben, aber ohne Glück!

Warten auf Vorschläge.

Danke, Raj

+1

nicht möglich ist. Sie müssen Ihren eigenen PopoverController erstellen – nacho4d

+0

Oh! Irgendwelche Hinweise, wie Sie unseren eigenen PopoverController erstellen können? Weil es nicht nur an einem bestimmten Ort als Unteransicht hinzugefügt, sondern auch entfernt wird, wenn der Benutzer es außerhalb des Pop-Over-Bereichs abgreift. Vielen Dank. –

+1

Erstellen Sie eine sehr große transparente Ansicht und in ihr werden Sie Ihr Popover hinzufügen. Wenn die große transparente Ansicht berührt wird, sollte sie verschwinden. Ist einfach, aber es schön aussehen wird ein bisschen mehr Arbeit erfordern (Animationen, Schatten, etc) – nacho4d

Antwort

2

diese Gelöst von UIView mit und auch durch die hitTest zwingende nach Ansicht des Haupt RootViewController zu sehen, ob der Berührungspunkt außerhalb dieser Ansicht ist. Ist dies der Fall, wird das Ereignis verbraucht, um das neue Popover zu schließen, andernfalls wird das Ereignis an das neue Popover weitergeleitet.

+0

Haben Sie Schatten mit view.layer.shadow hinzugefügt? –

+0

Nein, aber wir können das tun, keine große Sache. –

+0

Können Sie Beispielcode freigeben? – Bharathi

0

add popView als Subview, Code ist:

//!you must define the dimBackgroundView and set view in head file firstly, 

//action for a button,to add set view as a subview 
- (IBAction)openSetting:(id)sender { 

    if(!dimBackgroundView) 
    { 
     dimBackgroundView = [[UIView alloc] initWithFrame:self.view.bounds]; 
    } 
    dimBackgroundView.backgroundColor = [[UIColor clearColor] colorWithAlphaComponent:0.0]; 

    [self.view addSubview:dimBackgroundView]; 

    SettingViewController *set = [[SettingViewController alloc]initWithNibName:nil bundle:nil]; 
    [set.view setFrame:CGRectMake(120, 50, 400, 600)]; 
    self.setView = set; 

    //add shadow 
    set.view.layer.shadowOffset = CGSizeMake(3, 3); 
    set.view.layer.shadowColor = [UIColor colorWithRed:70.0/255.0 green:70.0/255.0 blue:80.0/255.0 alpha:1.0].CGColor; 
    set.view.layer.shadowOpacity = 0.8; 

    [self.view addSubview:set.view]; 
} 
//check touch position, if touch position is outside of setview, remove it from superview 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *) event{ 
    UITouch *touch = [[event allTouches] anyObject]; 
    if ([self.setView.view superview] && self.dimBackgroundView == touch.view) { 
     [self.dimBackgroundView removeFromSuperview]; 
     [self.setView.view removeFromSuperview]; 
    } 
}