标签: viewdidload

dealloc和viewdidunload有什么区别?

我什么时候应该释放我在程序中分配的所有内存?

因为我只有一个viewDidLoad方法,我在那里开展业务.我应该只在viewDidUnload中将dealloc留空并清理吗?

cocoa-touch viewdidload ios4 xcode4

5
推荐指数
1
解决办法
2947
查看次数

如何找出UIViewController视图的确切框架?

什么时候可以知道UIViewController视图的确切大小?

问题

我有一个多行,UILabel其帧取决于其文本和父视图的宽度.考虑到我需要放置其他视图下面UILabel,它做它的框架盖文的准确的空间是很重要的.

我目前正在计算这样的大小viewDidLoad:

labelSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(self.view.frame.size.width, MAX_HEIGHT)];
Run Code Online (Sandbox Code Playgroud)

问题是当父视图UIViewController用作模态表单或弹出框时,父视图的宽度会发生变化.如果我使用autoresizingMaskUILabel的框架进行相应的调整,但它不再适合文本.

UILabel知道UIViewController's视图的确切大小,我在哪里可以计算出这个框架?

调试努力

这是在显示UIViewController模态表单(UIModalPresentationFormSheet)时打印self.view.frame的结果.

viewDidLoad: (0.000000;0.000000;320.000000;480.000000)
viewWillAppear: (0.000000;0.000000;768.000000;960.000000)
afterDelay: (0.000000;0.000000;540.000000;576.000000)
Run Code Online (Sandbox Code Playgroud)

产生上述输出的代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    [Utils logFrame:self.view.frame tag:@"viewDidLoad"];
}

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [Utils logFrame:self.view.frame tag:@"viewWillAppear"];
    [self performSelector:@selector(afterDelay) withObject:nil afterDelay:0.1];
}

- (void) afterDelay {
    [Utils logFrame:self.view.frame tag:@"afterDelay"];
}
Run Code Online (Sandbox Code Playgroud)

iphone viewdidload ipad ios autoresizingmask

5
推荐指数
1
解决办法
3292
查看次数

如何在UINavigationController中按下后退按钮时调用viewDidLoad方法?(iPhone/iPad)

我需要一种viewDidLoad在按下'后退'按钮时调用方法的方法UINavigationController.所以,例如,如果我有这样的流程:

查看A - >查看B - >查看C.

我需要它,这样,如果我在View C,我压回,View BviewDidLoad方法应该被调用.同样,如果我打开View B并按下后退按钮View AviewDidLoad方法应该被调用.

请有人建议如何实现这一目标?

iphone uinavigationcontroller viewdidload ipad

5
推荐指数
1
解决办法
3528
查看次数

iOS函数调用一次(初始化应用程序时)

我有一个iOS应用程序.应用程序有2种不同的视图:Main和Settings.实际上,应用程序需要在主视图中使用之前加载和初始化某些库和框架.

当我把这个初始化放在viewDidLoad方法中时,它工作正常.但是当转到"设置"并返回"主视图"时,初始化将再次启动,这不是我想要的,并且应用程序会导致内存问题.

我需要一个在应用程序启动时调用一次的方法.任何的想法?

编辑:我切换到选项卡视图.它加载一次视图.这是另一种解决方案.

objective-c viewdidload ios

5
推荐指数
2
解决办法
7394
查看次数

CATransaction设置动画持续时间不起作用

我正在学习核心动画并尝试示例.

当我使用以下代码时,动画持续时间有效

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];

//Modifying base layer
self.view.layer.backgroundColor = [UIColor orangeColor].CGColor;
self.view.layer.cornerRadius = 20.0;
self.view.layer.frame = CGRectInset(self.view.layer.frame, 20, 20);

//Adding layer
mylayer=[CALayer layer]; //mylayer declared in .h file
mylayer.bounds=CGRectMake(0, 0, 100, 100);
mylayer.position=CGPointMake(100, 100); //In parent coordinate
mylayer.backgroundColor=[UIColor redColor].CGColor;
mylayer.contents=(id) [UIImage imageNamed:@"glasses"].CGImage;

[self.view.layer addSublayer:mylayer];
}


- (IBAction)Animate //Simple UIButton
{
[CATransaction begin];

// change the animation duration to 2 seconds
[CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];

mylayer.position=CGPointMake(200.0,200.0);
mylayer.zPosition=50.0;
mylayer.opacity=0.5;

[CATransaction commit];
}
@end
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我将Animate方法代码集中在ViewDidLoad按钮的底部,以便在不按任何按钮的情况下发生,则不会遵守动画持续时间.我只看到没有任何动画的最终结果.

有什么想法吗?

谢谢九巴

core-animation opengl-es calayer viewdidload ios

5
推荐指数
1
解决办法
9813
查看次数

viewDidLoad和viewWillAppear中的不同子视图布局

可能重复:
UIViewController返回无效帧?

调试时我注意到在viewDidLoad调用时我的视图框架origin=(x=0, y=20) size=(width=320, height=460)不准确.在viewWillAppear通话中它设置正确:origin=(x=0, y=0) size=(width=320, height=416)考虑导航栏高度.我的子视图布局取决于根视图,但我不希望每次出现视图时都设置它们.

我们该怎么处理这两个电话?

view uiviewcontroller viewdidload viewwillappear ios

5
推荐指数
1
解决办法
1711
查看次数

添加到容器视图时未调用 ViewDidLoad

我在故事板文件中设置了一个容器视图,但我想在设置一些属性后以编程方式嵌入视图控制器。这是我在父 VC 的 viewDidLoad 中的代码:

_workoutVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"entryTableVC"];
_workoutView = _workoutVC.tableView;

[self addChildViewController:_workoutVC];

[_workoutVC.tableView setFrame:_container.bounds];
[_container addSubview:_workoutView];
Run Code Online (Sandbox Code Playgroud)

然而,子进程中的viewDidLoad并不是随时被调用的。当我运行模拟器时,我的容器视图是空白的。我已经在调试器中检查过我的属性都不是nil.

objective-c viewdidload ios

5
推荐指数
1
解决办法
8497
查看次数

在UITabBarController中是否多次调用viewDidLoad?

我在我的应用程序中使用SWRevealViewController(以获得滑出侧面板)但是每当用户导航到另一个viewController(如'settings')并返回时,一切都会重置.我知道这是故事板的正常行为,因为实例化了新VC并且每次调用viewDidLoad.我试图通过将VC存储在AppDelegate中的数组中然后返回到原始的viewController来解决这个问题,这会阻止在最初重新呈现原始VC时调用viewDidLoad,但我仍然发现它在之间移动时被随机调用veiwcontroller's,重置我的所有属性等.在研究中,Apple文档确实说不要假设viewDidLoad只会被调用一次.

在切换标签时,这种行为在UITabBarController中是显而易见的,因为我正在考虑放弃SWRevealViewController并使用它而不是让它不那么头痛.

我应该以不同的方式处理,即.在NSUserDefaults中存储'state'并在viewDidLoad上恢复?

提前致谢.

objective-c uitabbarcontroller viewdidload ios

5
推荐指数
1
解决办法
4162
查看次数

TableViewController的viewDidLoad没有触发

我一直在关注这个教程,有一个幻灯片菜单.我添加了一个TableViewController,它将显示文章列表.由于某种原因,viewDidLoad没有开火.

在本教程中SideViewController,控制将显示哪个控制器,如果具有segue标识符"showPhoto",它将加载特定图像.

// Set the photo if it navigates to the PhotoView
if ([segue.identifier isEqualToString:@"showPhoto"]) {
    PhotoViewController *photoController = (PhotoViewController*)segue.destinationViewController;
    NSString *photoFilename = [NSString stringWithFormat:@"%@_photo.jpg", [menuItems objectAtIndex:indexPath.row]];
    photoController.photoFilename = photoFilename;
}
Run Code Online (Sandbox Code Playgroud)

我想为重新创建同样的东西,TableViewController并尝试强制viewDidLoad控制器,如此处所示强制viewDidLoad在iOS上触发,但它仍然无法正常工作:

if ([segue.identifier isEqualToString:@"showList"]) {
    TableViewController *tableController = (TableViewController*)segue.destinationViewController;
    [tableController view];
}
Run Code Online (Sandbox Code Playgroud)

TableViewController viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Change button color
    _sidebarButton.tintColor = [UIColor colorWithWhite:0.1f alpha:0.9f];

    // Set the side bar button action. …
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview viewdidload ios

5
推荐指数
1
解决办法
1445
查看次数

iOS presentViewController不会调用viewDidLoad

我正在实现自己的"后退"按钮.其中onClick,以下代码在ViewController被解雇的(VC)中执行:

  1. 关闭当前VC(VC#1)
  2. 弹出当前VC(VC#1)关闭我的自定义 navigationStack
  3. 从中获取最后一个VC(VC#2)navigationStack,然后使用它

presentViewController

后面的工作是视觉上有效的 - 即当前VC消失,之前VC出现.但是,viewDidLoad不调用该方法.因此,屏幕不会更新数据更新viewDidLoad.

 [self dismissCurrentViewController:self completion:^{
    [TWStatus dismiss];
    FHBaseViewController *vcToDisplay = [[FHDataManager sharedInstance] popNavigationStack];
    [vcToDisplay.homeVC presentViewController:vcToDisplay animated:NO completion: ^{ }];
}];
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我的印象是viewDidLoadpresentViuewController使用时总会被调用?
  2. 我使用viewDidLoadVC#2中的一个名为ONLY的方法"构建"屏幕.iOS如何在不显示屏幕的情况下显示viewDidLoad

顺便说一下,我没有使用故事板.任何帮助表示赞赏!

objective-c viewdidload ios presentviewcontroller

4
推荐指数
1
解决办法
2797
查看次数