Скрытие основного вида в приложении разделенного вида ..? - PullRequest
1 голос
/ 11 июня 2010

Я создал приложение ipad на основе разделенного вида, в котором основной вид - это табличный вид, а подробный вид - отображение изображений. Это может быть событие кнопки или двойное нажатие. Как это сделать. Заранее спасибо.

1 Ответ

4 голосов
/ 09 декабря 2010

Вы можете достичь желаемого, используя дополнительное окно в приложении, которое отображается по требованию поверх основного окна, содержащего разделенное представление.

Создайте новое окно UIWindow и новый UIViewController.Добавьте представление UIViewController в ваше новое окно, установите для уровня окна положительное значение (1 или более), чтобы оно находилось поверх вашего главного окна, затем поместите новое окно на экран.Если вы установите цвет фона окна на [UIColor clearColor] и поместите свое изображение в виде внутри нового UIViewController непосредственно поверх изображения, которое находится в подробном представлении, тогда пользователь не заметит, что что-то новое произошло.Затем вы можете анимировать кадр изображения на весь экран или делать все, что вы хотите.Мы иногда используем эту технику для поддержки перетаскивания или наших собственных пользовательских контроллеров модального представления, но она также будет работать для ваших целей.

Вот пример:

@interface MyViewController : UIViewController @end


@interface AppDelegate : NSObject <UIApplicationDelegate> {
    MyViewController            *overlayController;
    UIWindow                    *overlayWindow;

    UIWindow                    *window;                // the main window that contains your splitview
    UINavigationController      *navigationController;  // or split view contoller, whatever, your main controller
}

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIWindow *window;

@end


@implementation MyViewController

- (void) loadView {
    self.view = [[[UIView alloc] initWithFrame: CGRectZero] autorelease];
    self.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    self.view.backgroundColor = [UIColor redColor];
}

@end


@implementation AppDelegate

@synthesize window, navigationController;


- (void) click:(id) sender {
    [overlayController.view removeFromSuperview];
    [overlayController release];
    overlayController = nil;

    overlayWindow.hidden = YES;
    [overlayWindow release];
    overlayWindow = nil;
}


- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // Add the navigation controller's view to the window and display.
    // standard stuff...
    [self.window addSubview: navigationController.view];
    [self.window makeKeyAndVisible];

    // add the overlay window
    // note that both the overlay window and controller are retained until we dismiss
    // the window, this is important!
    overlayWindow = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].applicationFrame];   // or [UIScreen mainScreen].bounds, depending on what you want
    overlayController = [MyViewController new];
    overlayController.view.frame = overlayWindow.bounds;

    UIButton *button = [UIButton buttonWithType: UIButtonTypeRoundedRect];

    [button addTarget: self action: @selector(click:) forControlEvents: UIControlEventTouchUpInside];
    [button setTitle: @"Done" forState: UIControlStateNormal];
    button.frame = CGRectMake( 0, 0, 100, 50 );
    button.center = overlayController.view.center;

    [overlayController.view addSubview: button];

    // the controller's view is the first and only view in the
    // new window.  this ensures you get rotation events.  Add any subviews
    // that will appear in the new window to overlayContoller.view
    [overlayWindow addSubview: overlayController.view];
    [overlayWindow setWindowLevel: 1];
    [overlayWindow makeKeyAndVisible];

    return YES;
}


- (void)dealloc {
    [overlayController release];
    [overlayWindow release];
    [navigationController release];
    [window release];
    [super dealloc];
}


@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...