我以为我永远不应该调用[super loadView],但有些东西让我感到困惑.
在loadView(UIViewController类参考)的描述中,它说"你的自定义实现这个方法不应该调用super.",但是在他们给出的ZoomingPDFViewer示例中,loadView实现(ZoomingPDFViewerViewController)正在调用[super loadView].
我试图从我的loadView方法调用它,它工作正常,但我只是不明白那么不调用超级是什么意思.
我有两个窗口应用程序,当我呈现第一个窗口时,我希望第二个窗口中的视图加载并准备以后在后台的内容.
我试过使用方法,loadView但Apple说你不应该直接调用这个方法.
到目前为止,我已经选择使用视图的方法userInteractionEnabled,它实际上隐式调用viewDidLoad方法.
是否有一种优雅的方法可以强制ViewControllers viewDidLoad方法在自然之前(当窗口是关键并呈现时)进行激活?
如何在loadView中一致地确定正确的大小来布局视图?
我有不同的情况,其中UIViewController被推送到UINavigationController,或UITabBarController存在,或两者兼而有之.如果我硬编码值,这些元素会更改可用的屏幕区域并使其不一致.
在调用loadView的那一刻,我想知道如何调整容器视图的大小,我将我的子视图添加到.
我查看了UIViewController指南,Apple使用了UIScreen mainScreen applicationFrame,但在他们的示例中,这是因为他们正在制作一个全屏应用程序.
我在这里看到了一些答案,但没有一个能够以一致的方式解决这个问题.
谢谢你给予的任何帮助.
viewDidLoad()和LoadView()有什么区别?它们以何种方式彼此不同?
在不使用XIB开发应用程序时哪一个更好?
谢谢 .
我不明白loadView:函数的机制(这个函数在UIView中).
我创建了一个项目如下:
UIView子类UIViewController没有xib 的子类.loadView:我在第三步中创建的类的函数中,我将UIView对象(在我在第二步中创建的类)指定为对象的视图变量UIViewController(在第三步中).如果我省略了最后一步,并将语句NSLog(@"test LoadView");放在loadView:函数中,那么当项目运行时,语句NSLog(@"test LoadView");会被连续调用,导致运行溢出.
请解释一下!谢谢!
loadView在UIViewController没有XIB文件的情况下计算方法中的视图大小的最佳做法是什么?
这是我的解决方案:
- (void)loadView {
//Calculate Screensize
BOOL statusBarHidden = [[UIApplication sharedApplication] isStatusBarHidden ];
BOOL navigationBarHidden = [self.navigationController isNavigationBarHidden];
BOOL tabBarHidden = [self.tabBarController.tabBar isHidden];
CGRect frame = [[UIScreen mainScreen] bounds];
if (!statusBarHidden) {
frame.size.height -= [[UIApplication sharedApplication] statusBarFrame].size.height;
}
if (!navigationBarHidden) {
frame.size.height -= self.navigationController.navigationBar.frame.size.height;
}
if (!tabBarHidden) {
frame.size.height -= self.tabBarController.tabBar.frame.size.height;
}
UIView *v = [[UIView alloc] initWithFrame: frame];
[v setBackgroundColor: [UIColor whiteColor] ];
[v setAutoresizingMask: UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight ];
[self setView: v ];
[v release]; …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个UITableViewController,以便它的tableView属于我的自定义子类.我的loadView方法目前看起来像这样:
- (void) loadView {
MyTableViewSubclass* tv = [[[MyTableViewSubclass alloc]initWithFrame: CGRectZero style: UITableViewStylePlain]autorelease];
self.view = tv;
self.tableView = tv;
}
Run Code Online (Sandbox Code Playgroud)
如果我评论出上述方法,我会在之后发生崩溃.所以缺少一些东西.但是什么?
Apple的文档说我不应该在loadView中调用super.这是有道理的,因为我希望视图有我的课程,而不是他们的课程.
我尝试过的事情没有帮助:
我试过的一件事确实解决了这个问题,但却失败了:
编辑:崩溃如下所示.它发生在用户做一些输入之后.如果我创建一个普通的UITableView而不是我的子类,它也会以相同的方式发生.应用程序中有很多内容,我的loadView覆盖[或者更有可能的是,覆盖中缺少的东西]导致状态不同,从而导致崩溃.但我没有看到追踪不同之处的好方法.
2011-09-08 12:44:59.591 MyAppName[97649:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[MyTableViewSubclass scrollToRowAtIndexPath:atScrollPosition:animated:]: row (0) beyond bounds (0) for section (0).'
Run Code Online (Sandbox Code Playgroud) 我正在尝试用子类 UIView 替换 UIViewController 根视图。
在 iPhone SDK 的 UIViewController 类参考中,在它的概述部分中,说明了这一点:
您使用 UIViewController 的每个实例来管理全屏视图。对于一个简单的视图控制器,这需要管理负责呈现应用程序内容的视图层次结构。典型的视图层次结构由一个根视图(此类的视图属性中提供的引用)和一个或多个呈现实际内容的子视图组成。
在视图属性上的链接之后,它指出:
如果您的视图控制器没有关联的视图控制器,您应该覆盖 loadView 方法并使用它来创建根视图及其所有子视图。
如果这段代码放在 loadView 中,它会创建根视图,假设我使用的是我自己的 UIView 子类 MyView:
self.view = [MyView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
Run Code Online (Sandbox Code Playgroud)
谢谢 // :)
在UIViewController中使用loadView时非常有趣的问题.
通常我们这样使用
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
NSLog(@"loadview");
[super loadView];
}
Run Code Online (Sandbox Code Playgroud)
如果删除
[super loadView];
Run Code Online (Sandbox Code Playgroud)
我们将得到这个死循环
- (void)loadView {
NSLog(@"loadview");
}
Run Code Online (Sandbox Code Playgroud)
为什么?
在文档中loadView,Apple声明:
您对此方法的自定义实现不应该调用super.
所以我试着[super loadView]用我的loadView方法调用.似乎没有什么不好的事情发生,没有任何警告.我正在使用以编程方式创建的视图loadView,而不是来自NIB.
我打电话时会发生什么(如果有的话)坏事[super loadView]?
loadview ×10
ios ×7
iphone ×4
objective-c ×3
cocoa-touch ×2
uiview ×2
viewdidload ×2
uitableview ×1