【问题标题】:loadView() no calledloadView() 没有调用
【发布时间】:2013-01-29 19:03:33
【问题描述】:

我有一个 UIViewController 使用定义的 loadView 方法调用另一个视图控制器。我尝试了很多方法都没有成功解决 loadView 方法没有被调用的问题。

感谢任何帮助。

谢谢。 马科斯

调用者 UIViewController

#import "MyAlbumViewController.h"
@interface ViewController : UIViewController
@end

实现

#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


}

- (void)viewDidAppear:(BOOL)animated{

    UIViewController*albumVC = [[MyAlbumViewController alloc] init];

    [self.navigationController pushViewController:albumVC animated:YES];


}
@end

调用 UIViewController

@interface MyAlbumViewController : NIToolbarPhotoViewController <NIPhotoAlbumScrollViewDataSource>

@end

实施

#import "MyAlbumViewController.h"

@implementation MyAlbumViewController

- (void)loadView{

    [super loadView];

    self.photoAlbumView.dataSource = self;

    // Set the default loading image.
    self.photoAlbumView.loadingImage = [UIImage imageWithContentsOfFile:
                                        NIPathForBundleResource(nil, @"NimbusPhotos.bundle/gfx/default.png")];

    self.title = NSLocalizedString(@"Loading...", @"Navigation bar title - Loading a photo album");

    [self loadAlbumInformation];
}...

【问题讨论】:

  • 你为什么使用 loadView 而不是 viewDidLoad?
  • 这是来自 Nimbus iOS 框架的编程视图。
  • 查看stackoverflow.com/questions/7788928/… 了解有关 loadView 的讨论
  • 是的,如果您使用的是编程视图,那么使用 loadView 非常好。我想可能是你的 self.navigationController = nil

标签: ios objective-c nimbus-ios


【解决方案1】:

loadView的思想是完全覆盖方法,而不是调用super

您所做的正是 viewDidLoad 方法的用途,无论您是从 nib 文件还是其他文件加载它都没有关系

我引用你自己的帖子,在你的ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


}

【讨论】:

  • 如果我调用的 UIViewController 有一个以编程方式定义的视图,我应该从 loadView 加载视图还是我错了?
  • 不必使用loadView。你甚至可以在viewDidLoad 中创建一些东西,比如添加一个表格或一些按钮等等,因为该方法是在 loadView 之后立即调用的,并且只有在它刚刚创建时,我才会一直这样做:)
  • 我刚刚在 viewDidLoad 中添加了一个 NSLog 并且没有显示结果。也没有调用 viewDidLoad。看来我在 [self.navigationController pushViewController:albumVC animated:YES]; 上做错了
  • 我从 [self.navigationController pushViewController:albumVC animated:YES]; to [self presentViewController:albumVC animated:YES completion:nil];
  • 现在它调用 loadView() 和 viewDidLoad()。
【解决方案2】:

我正在推动视图控制器:

 [self.navigationController pushViewController:albumVC animated:YES];

我刚改成:

[self presentViewController:albumVC animated:YES completion:nil];

UIViewController 导航控制器

navigationController 视图控制器中最近的祖先 作为导航控制器的层次结构。 (只读)

@property(非原子,只读,保留) UINavigationController *navigationController 讨论 如果接收者或其祖先之一是导航控制器的子节点,则此属性 包含拥有的导航控制器。如果 视图控制器未嵌入导航控制器中。

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 1970-01-01
    • 2011-05-21
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多