web-dev-qa-db-ger.com

IOS: Wie kann ich einen Blick auf den dargestellten Modal View Controller stellen?

Ich habe eine Aktivitätsansicht, die ich in der AppDelegate-Klasse zur Tap-Leiste hinzugefügt habe:

[self.mainTabBar.view addSubview: spinner];

Wenn es Verbindungsprobleme gibt, ist sie in jedem Ansichts-Controller sichtbar und dreht sich. Es gibt eine Schaltfläche in einem bestimmten Ansichts-Controller, die dazu dient, einen modalen Ansichts-Controller zu präsentieren. Wie lässt sich der Spinner immer auf allen Ansichten oder zumindest auf diesem modalen Ansichtscontroller befinden? Ich habe versucht, eine solche Ansicht im Viewcontroller zu erstellen, der den modalen Ansichtscontroller darstellt:

[self presentModalViewController:selectionViewController animated:YES];
[self.view bringSubviewToFront:[self.tabBarController.view viewWithTag:15]];

Funktioniert nicht.

22
nik

Fügen Sie die Ansicht zum Hauptfenster hinzu.

UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview: spinner];
61
Felix

Obwohl die Antwort von phix23 korrekt ist, ist hier ein vollständigeres Beispiel:

//The view you want to present
UIViewController *viewControllerYouWantToPresentOnTop = [[UIViewController alloc] initWithNibName:nil bundle:nil];

//Create transparent Host view for presenting the above view
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
UIViewController *viewControllerForPresentation = [[UIViewController alloc] init];
[[viewControllerForPresentation view] setBackgroundColor:[UIColor clearColor]];
[[viewControllerForPresentation view] setOpaque:FALSE];
[mainWindow addSubview:[viewControllerForPresentation view]];

//Make your transparent view controller present your actual view controller
[viewControllerForPresentation presentViewController:viewControllerYouWantToPresentOnTop animated:TRUE];

Vergiss nicht, nach dir aufzuräumen, wenn du sie nicht mehr brauchst.

Dieser Code kann von überall in Ihrer App verwendet werden, sogar in einer Bibliothek :)

12
Maciej Swic

Normalerweise zeigt eine App ihren Inhalt während der gesamten Lebensdauer in einem einzigen Fenster an. Es gibt jedoch Situationen, in denen ein zusätzliches Fenster verwendet werden kann, um Inhalte über alles andere hinzuzufügen. Apple sorgt dafür, dass UIAlertView immer im Vordergrund bleibt, indem es in einem separaten Fenster hinzugefügt wird.

UIView *contentView = [[UIView alloc] initWithFrame:contentFrame];
contentView.backgroundColor = [UIColor greenColor];
UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(x,y,contentFrame.size.width, contentFrame.size.height)];
window.windowLevel = UIWindowLevelAlert;
[window addSubview:contentView];
[window makeKeyAndVisible];

Zeigen Sie Ihr Fenster an und verbergen Sie es, indem Sie window.hidden = Yes or No nach Bedarf festlegen . Dadurch wird Ihre contentView immer vor allem in der App angezeigt.

4

Der modale Controller befindet sich in einer völlig anderen Ebene. Sie können keine untergeordnete Ansicht des präsentierenden Controllers erstellen, um ihn zu überlappen.

Verwenden Sie eine UIAlertView mit einem Spinner. Die Alarme werden in einer Ebene angezeigt, die sogar modale Controller überlappt.

0
Sulthan