标签: viewdidload

UIViewController viewDidLoad vs. viewWillAppear:什么是适当的分工?

我一直对应分配给的任务类型有点不清楚viewDidLoad对比viewWillAppear:在一个UIViewController子类.

例如,我正在做一个应用程序,我有一个UIViewController子类命中服务器,获取数据,将其提供给视图,然后显示该视图.什么是这样做的利弊viewDidLoad对比viewWillAppear

uiviewcontroller viewdidload viewwillappear ios

160
推荐指数
4
解决办法
10万
查看次数

UIView - 如何在加载视图时收到通知?

有什么类似viewDidLoadUIViewControllerUIView??? 我需要在UIView加载(Subclass of UIView)后立即得到通知,并执行一些操作.

iphone objective-c uiview viewdidload ios

76
推荐指数
1
解决办法
3万
查看次数

我总是要在-viewDidLoad方法中调用[super viewDidLoad]吗?

在Apple的scrollView示例中,他们不会调用它.我一直认为这是必须的.我为什么要打电话呢?

iphone viewdidload

52
推荐指数
7
解决办法
2万
查看次数

无法在viewDidAppear之前正确设置框架

我想知道是否有人知道为什么当你设置子视图的框架viewDidLoad并且viewWillAppear更改不会影响屏幕,但如果你设置viewDidAppear它们呢?

在我的情况下,我正在加载一个带有两个tableviews的自定义xib,然后尝试将它们向下移动viewDidLoad以允许添加另一个视图的空间,viewDidLoad因为它并不总是需要显示它.

问题是当我设置框架viewDidLoadviewWillAppear在对象上设置框架时,我可以看到它打印出来,但它没有反映在屏幕上.移动我的设置框架调用viewDidAppear将导致一切按预期工作.

认为我应该能够设置框架是错误的viewDidLoad吗?

- (id)init {
    if ( self = [super initWithNibName:@"MyView" bundle:nil] ) {}

    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.descriptionWebView = [[[UIWebView alloc] initWithFrame:CGRectMake( 0, 0, self.view.frame.size.width, 200 )] autorelease];

    [self.view addSubview:self.descriptionWebView];

    self.tableView1.autoresizingMask = UIViewAutoresizingNone;
    self.tableView2.autoresizingMask = UIViewAutoresizingNone;

    [self.descriptionWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"...." withExtension:@"html"]]];

    table1LocationWithHeader = CGRectMake( self.tableView1.frame.origin.x, 200, self.tableView1.frame.size.width, self.tableView1.frame.size.height - 200 );
    table2LocationWithHeader = CGRectMake( …
Run Code Online (Sandbox Code Playgroud)

objective-c uiview viewdidload viewdidappear ios

41
推荐指数
1
解决办法
3万
查看次数

Android的viewDidLoad和viewDidAppear相当

Android是否具有与Cocoa的viewDidLoad和viewDidAppear函数相同的功能?

如果没有,那么当View出现时我将如何执行操作?我的应用程序是一个标签式应用程序,其中一个选项卡是论坛主题列表.我希望每次出现视图时都刷新主题列表.在Android中这样的事情可能吗?

iphone android viewdidload viewdidappear

31
推荐指数
2
解决办法
2万
查看次数

为什么我必须在viewDidLoad中手动设置视图的框架?

我有一个非常基本的设置,在UITabBarController中有一个UINavigationController.我想以编程方式布局该navcontroller的rootViewController视图,但是当我查看viewDidLoad中的self.view.frame时,我得到了这个(例如,在横向中):

1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
Run Code Online (Sandbox Code Playgroud)

然后我自动旋转到肖像,我得到了这个:

2. view frame: {{0, 0}, {768, 911}}
Run Code Online (Sandbox Code Playgroud)

然后,当我回到Landscape时,框架现在是这样的:

3. view frame: {{0, 0}, {1024, 655}}
Run Code Online (Sandbox Code Playgroud)

并且进一步的自转事件将在帧值#2和#3之间触发.

为了解决#1的怪异问题,我目前正在viewDidLoad中执行此操作:

if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
    self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
    self.view.frame = CGRectMake(0, 0, 1024, 655);
}
Run Code Online (Sandbox Code Playgroud)

我觉得我在这里显然缺少一些东西.为什么视图的默认框架在自动旋转回相同方向时与框架不匹配?视图框架是否未设置为初始方向?非常困惑...

我应该提一下,上述所有内容,包括我的kludgy hack,都没有在视觉上改变任何东西.我有黑客的原因是,当我将我的子视图布局到这个视图中时,它们将基于我期望它们的位置,即导航栏下方的左上角.

我究竟做错了什么?

更新:关闭视图更改结果#1的所有自动调整内容:

view frame: {{0, 0}, {748, 1024}}
Run Code Online (Sandbox Code Playgroud)

这似乎有点接近,但仍然不匹配#3.

iphone frame uiview viewdidload ipad

31
推荐指数
1
解决办法
2万
查看次数

swift中的awakeFromNib()和viewDidLoad()之间的区别

我想知道awakeFromNib()和viewDidLoad()之间的关键区别,以便更清楚地了解它是如何工作的.请有人解释一下吗?

viewdidload awakefromnib swift

29
推荐指数
1
解决办法
2万
查看次数

在prepareForSegue完成之前调用的viewDidLoad

我认为viewDidLoad会在prepareForSegue结束后被调用.这就是Hegarty如何教他的斯坦福大学课程(最近在2013年2月).

但是,今天我第一次注意到,在READForSegue完成之前调用了viewDidLoad.因此,我在prepareForSegue中设置的属性不可用于目标viewDidLoad方法中的destinationViewController.

这似乎与预期的行为相反.

UPDATE

我只知道发生了什么事.在我的destinationViewController中,我有一个自定义setter,每次更新"model"时都会重新加载tableView:

DestinationViewController    
- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        [self.tableView reloadData];
    }
Run Code Online (Sandbox Code Playgroud)

事实证明,因为destinationViewController是UITableViewController的子类...调用'self.tableView'会强制加载视图.根据Apple的文档,调用视图控制器的view属性可以强制加载视图.UITableViewController的视图是tableView.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

因此,在prepareForSegue中,以下行强制加载destinationViewController的视图:

vc.managedObjectsArray = <custom method that returns an array>;
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我将destinationViewController模型的自定义setter更改为:

- (void)setManagedObjectsArray:(NSArray *)managedObjectsArray
    {
        _managedObjectsArray = [managedObjectsArray copy];
        if ([self isViewLoaded]) {
            [self.tableView reloadData];
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果tableView在屏幕上,这将只重新加载tableView.因此,在prepareForSegue期间不强制加载视图.

如果有人反对这个过程,请分享您的想法.否则,我希望这可以防止一个人长时间不眠之夜.

storyboard viewdidload ios segue

28
推荐指数
2
解决办法
1万
查看次数

我是否以编程方式在ViewDidAppear,ViewDidLoad,ViewWillAppear,构造函数中添加子视图?

我试图从Apple的粗略文档中找出哪种方法是初始化并将我的Views控件添加到控制器视图的最佳位置.

使用winforms它是相当简单的,因为它们总是在内部初始化InitializeDesigner,在构造函数中调用.如果可能的话,我正试图匹配这种模式的可靠性.

我工作UIViewControllersUITableViewControllers内部的UINavigationController,如果这影响了一切-大部分时间.

这是一个例子:

public MyController()
{
    // Here?
    AddViews();
}

public override ViewDidLoad()
{
    base.ViewDidLoad();

    // Or is should it be here?
    AddViews();
}

public override ViewWillAppear(bool )
{
    base.ViewWillAppear(animated);

    // Here?
    AddViews();
}

public override ViewDidAppear(bool animated)
{
    base.ViewDidLoad(animated);

    // Or maybe here?
    AddViews();
}

void AddViews()
{
    UILabel label = new UILabel();
    label.Text = "Test";
    label.Frame = new RectangleF(100,100,100,26);
    View.AddSubView(label);

    UIWebView webview = new UIWebView();
    webview .Frame …
Run Code Online (Sandbox Code Playgroud)

iphone viewdidload xamarin.ios viewdidappear viewwillappear

25
推荐指数
2
解决办法
2万
查看次数

强制viewDidLoad在iOS上触发

我有两个窗口应用程序,当我呈现第一个窗口时,我希望第二个窗口中的视图加载并准备以后在后台的内容.

我试过使用方法,loadView但Apple说你不应该直接调用这个方法.

到目前为止,我已经选择使用视图的方法userInteractionEnabled,它实际上隐式调用viewDidLoad方法.

是否有一种优雅的方法可以强制ViewControllers viewDidLoad方法在自然之前(当窗口是关键并呈现时)进行激活?

iphone viewdidload loadview ios

22
推荐指数
3
解决办法
9436
查看次数