【问题标题】:Modal UIViewController doesn't appear模态 UIViewController 不出现
【发布时间】:2010-12-12 05:30:19
【问题描述】:

我正在尝试从模态视图控制器(第 2 个)加载模态视图控制器(第 1 个)。虽然听起来很复杂,但可能并非如此。

第一个控制器实际上是一个 UIWebView,它在 .m 文件的 loadView 方法中初始化:

- (void)loadView {

    // Initialize webview and add as a subview to LandscapeController's view
    myWebView = [[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    //CGRect forceframe = CGRectMake(0, 0, 480, 320);
    //myWebView = [[[UIWebView alloc] initWithFrame:forceframe] autorelease];
    myWebView.scalesPageToFit = YES;
    myWebView.autoresizesSubviews = YES;
    myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);  
    myWebView.delegate = self;
    self.view = myWebView; 
}

然后在viewDidLoad中:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Load HTML file as an NSURL request
    [self.myWebView loadHTMLString:updated_html baseURL:nil];

    // Invoke the covering modal view on condition
    if (some_condition) {
        landscapeCoverController = [[UIViewController alloc] initWithNibName:@"LandscapeCoverController" bundle:[NSBundle mainBundle]];

        [self presentModalViewController:landscapeCoverController animated:YES];
        [landscapeCoverController release]; 
    }   

预期的第二个模态视图控制器 (landscapeCoverController) 使用我在 IB 中设置的 NIB 进行初始化。

我的预期目标是用“LandscapeCoverController”视图有条件地覆盖 UIWebView,该视图将具有一些按钮和交互性,这将导致第二个模态视图被关闭。

为什么我的 LandscapeCoverController 没有加载?任何想法都非常感谢!

另外...第一个模态视图控制器 (LandscapeViewController) .h 看起来像:

@class LandscapeCoverController;

@interface LandscapeViewController : UIViewController <UIWebViewDelegate> {
    UIWebView *myWebView;

    LandscapeViewController *landscapeCoverController;
}

@property (nonatomic, retain) UIWebView *myWebView;

@property (nonatomic, retain) LandscapeViewController *landscapeCoverController; // Modal view controller

并且...第二个模态视图控制器 (landscapeCoverController) viewDidLoad 什么都不做:

// NIB initialized in LandscapeViewController.m viewDidLoad:
- (void)viewDidLoad {
    [super viewDidLoad];

}

我认为的

landscapeCoverController = [[UIViewController alloc] initWithNibName:@"LandscapeCoverController" bundle:[NSBundle mainBundle]];
[self presentModalViewController:landscapeCoverController animated:YES];
[landscapeCoverController release]; 

语句应该处理控制器的初始化和加载...

【问题讨论】:

  • mainScreen 是您应用中的视图吗?
  • @sudo rm -rf (nice name) mainScreen 是 UIScreen 的一个类方法,它返回一个表示屏幕边界的 UIScreen 对象。

标签: iphone uiviewcontroller initialization modalviewcontroller


【解决方案1】:

您将landscapeCoverController 声明为LandscapeViewController 的实例,并将其分配为UIViewController。这很可能是您的问题(可能是第一个问题,因为您没有调用任何特定于 LandscapeViewController 的方法)。另外,由于landscapeCoverController 是一个实例变量,所以你不需要在presentModalViewController 之后释放它。尝试选择更多不同的类名。它会让你在以后免于这样的困惑。

【讨论】:

  • 感谢您的关注!是的,将类型从 LandscapeViewController 更改为 LandscapeCoverController。仍然没有让封面控制器的视图出现...... LandscapeView(myWebView)完美地出现 - 它应该被 CoverController 的 NIB 视图覆盖......
  • 您是否将 LandscapeCoverController = [[UIViewController ...] 更改为 LandscapeCoverController = [[LandscapeCoverController ...]?并确保您在 IB 中设置了 view outlet。
  • 确认我已经进行了这些更改,但仍然没有看到 LandscapeCoverController 视图...
  • IB项目中没有错误。有 16 个构建警告,其中 14 个与在不相关的视图控制器中使用的 NSUserDefaults 对象有关...@synthesize 语句都在那里。没有设置任何代表来关闭模式视图...不知道这是否是问题的一部分...
  • 在这种情况下,必须从 viewDidAppear 调用模态视图控制器。查看更多信息:stackoverflow.com/questions/4516483/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2012-02-18
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
相关资源
最近更新 更多