【问题标题】:Hiding master view in split view app..?在拆分视图应用程序中隐藏主视图..?
【发布时间】:2010-06-11 06:18:28
【问题描述】:

我创建了基于拆分视图的 ipad 应用程序,其中主视图是表格视图,而详细视图显示图像。我需要在横向模式下显示适合屏幕 100% 的图像。 这可能是按钮事件或双击事件。我应该怎么做。 提前致谢。

【问题讨论】:

  • 我使用了模态视图,例如 as.. [self presentModalViewController:self animated:YES];但问题是当我关闭弹出窗口拆分视图时仅显示根视图而不显示详细视图。

标签: iphone objective-c ipad


【解决方案1】:

您可以通过在应用中使用辅助窗口来完成您想要的操作,您可以在包含拆分视图的主窗口顶部按需显示该辅助窗口。

创建一个新的 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

【讨论】:

  • 天气你的应用程序支持旋转吗?这个想法很棒,但使用两个窗口我认为它会出现旋转问题。虽然我通过将详细视图框架宽度及其 x 原点更改为 0 解决了我的问题。
  • 只要每个窗口只有一个视图,旋转就可以了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多