Tag: viewwillappear

为什么viewWillAppear没有被调用?

您为什么期望如此? 最有可能的是-您想知道您的用户将要看到一个屏幕。 有各种各样有用的理由想要这个。 也许您想跟踪分析屏幕视图,或触发数据获取以保持屏幕新鲜。 无论您的目标是什么,有人都可能告诉您检查viewWillAppear -好消息。 它会实现这些目标,但有时会起作用。 * 简单答案 调用viewWillAppear的技术原因很简单。 通知视图控制器其视图将被添加到视图层次结构中。 它不能是任何视图层次结构-它必须是在根目录下具有UIWindow视图层次结构(不一定是可见窗口)。 如果您从一个选项卡跳到另一个选项卡,或者从UINavigationController推送并弹出,那很好。 iOS正在从视图层次结构中删除视图,并每次都将其重新插入。 在所有这些过程中,视图仍保留在内存中,因此不会重复调用viewDidLoad 。 但是,当您开始在当前屏幕上显示视图时会遇到麻烦,因为有时*它将删除基础视图,但有时*不会。 展示您的View Controller 这完全取决于您如何呈现模态视图。 如果可能的话,iOS倾向于删除基础视图(内存很宝贵)。 但是,如果您的设计师坚持要保留该基本视图,则可以要求iOS通过设置正确的.modalPresentationStyle来保留它。 您可以选择以下选项,以及关闭后是否在其父视图上触发viewWillAppear : UIModalPresentationStyle选择 .none的文档说…… “不要使用这种样式来呈现视图控制器。” 他们通过崩溃强制执行此操作。 感谢Apple让我们保持警惕! 备用计划 当下面的视图保留时,关闭叠加视图时将不会调用viewWillAppear 。 要开展业务,您必须在dismiss呼叫中加入完成处理程序。 将引用传递给呈现的视图控制器的最佳方法是什么? 这确实取决于您如何设置应用程序,这超出了本文的范围。 缺失的环节 当我们将视图添加到窗口的视图层次结构时,iOS如何知道要通知哪个UIViewController ? 从UIViewController文档中,我们可以看到它具有对其拥有的view的引用,但是UIView文档中没有任何内容表明它知道哪个UIViewController拥有它。 这些present方法也没有什么特别的事情发生-即使直接添加视图, viewWillAppear调用也会发生。 仅仅因为苹果不告诉我们发生了什么,并不意味着我们就无法做出有根据的猜测。 让我们偷偷摸摸,检查专用API… 查看所有这些额外的属性! 而且只有一种具有我们要寻找的类型…… UIViewController* _viewDelegate; 让我们通过创建2个视图控制器进行测试。 我们将一个注入到另一个view的_viewDelegate中,并将该view添加到窗口的视图层次结构中时,应调用注入的视图控制器的viewWillAppear 。 自己尝试一下! 警告 —请勿使用私有API交付应用程序。 这是一种危险的编码方式。 这些属性是私有的,Apple保留在不通知您的情况下随时更改其基础实现的权利。 […]

在收到服务器请求的响应后的一定时间间隔后更改选项卡视图

在具有UITabBarController的应用程序中,我想实现以下scheme: 当用户在“X”标签上时 ,他/她做了一些事情,然后移动到另一个标签。 再次回到'X'标签( 说5分钟后 – >这个很重要,因为我将来可能会改变5分钟到10分钟 ),那么我想显示一些信息,比如你的'Session is expired'。 每当用户返回“X”标签,就需要服务器请求获取响应码。 取决于我想显示popup“会话已过期”。 我想下面的方式来实现: 在每个viewWillAppear:所有视图的方法被加载在'X'选项卡 viewController的UITabBarController我会做服务器请求和检查响应和执行相应的操作。 但是它会涉及到很多我想避免的服务器请求。 我无法用解决scheme来结束。 我怎样才能达到我的要求? 非常感谢你的帮助。

NSString里面的问题将会消失

我现在正在和这段代码作斗争,我真的很感激你的洞察力。 所以这里是… 在我的.h文件中声明的fileName NSString *fileName; 后来又如 @property (nonatomic, copy) NSString *fileName; viewWillDisappear不可访问。 它只是显示为零对象,或一些奇怪的价值,当我debugging。 当我debugging时,我的控制台显示这个味精: 打印fileName的说明: FileNumber1 当我到达viewWillDisappear我的控制台显示这个: 打印fileName的说明: 是的,只是没有文件名..价值只是消失..我只是不知道为什么! 更多细节 : 在我的init方法中,我做了以下,它工作正常。 fileName = [[NSString alloc] initWithString:(NSString *)CFURLGetString(pdfURL)]; fileName = [[fileName lastPathComponent] stringByDeletingPathExtension]; fileName = [fileName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 在整个程序中,我可以访问fileName就好了,但在viewWillDisappear我试图通过尝试以下保存到我的standardUserDefaults : NSUserDefaults *ud = [[NSUserDefaults standardUserDefaults] autorelease]; NSArray *tmp = [NSArray arrayWithArray:someMutableArray]; [ud setObject:tmp forKey:fileName]; // THE […]

在调用super的viewDidLoad和viewWillAppear之前/之后放置代码

由于UIViewController中的关键字“did”和“will”,我不确定在viewDidLoad和viewWillAppear中调用super之前/之后放置代码的位置,以使代码有效地运行。 例如: – (void)viewDidLoad { [super viewDidLoad]; // Code is here because whatever // setup in super should been done first // before we can do anything } – (void)viewWillAppear:(BOOL)animated { // Code should be here to finish // whatever we want to do in our view // before calling super [super viewWillAppear:animated]; } 这可能会被应用到didRotate和willRotate。 […]

如何确定从iOS中的背景返回到前台加载哪个视图?

我有一个应用程序有多个视图。 当我从背景中回到前景时,我想确定我目前在哪个视图。 我该怎么做? [编辑] 我明白navigationController的visibleViewController属性可能会有所帮助。 但是,我想知道如何在UIViewController对象中使用它返回的指针。 我们如何比较指针? 一些代码片段会非常有帮助。

UIViewController调整自己viewWillAppear和viewDidAppear之间?

我的项目中有一个非常奇怪的错误。 我有一个UIScrollView作为我的主要观点。 在里面,我有一个UIViewController (而不是UITableViewController ),它有一个UITableView实例variables,以及一些杂项UIButtons 。 我已经把视图控制器的视图框架设置为CGRectMake(0, 64, 320, 388) ,因为我有一个标签栏上面(这是不是function呢)。 起初,它工作得很好,看起来不错,但一旦我提出和解雇一个modalViewController (因此重新加载UIViewController ,我相信),它推动UIViewController的视图到屏幕的顶部(默认设置为CGRectMake(0, 0, 320, 460) wantsFullScreenLayout CGRectMake(0, 0, 320, 460) ,但是因为我把wantsFullScreenLayout设置为NO ,所以现在将它设置为CGRectMake(0, 0, 320, 388) 。 我已经将这个问题追踪到viewWillAppear和viewDidAppear之间的某处。 这是我的确切日志解散modalViewController : 2011-05-06 11:08:39.974 Campus [1570:207] Frame是0.000000,64.000000,320.000000,388.000000(viewWillAppear) 2011-05-06 11:08:40.378 Campus [1570:207] Frame是0.000000,0.000000,320.000000,388.000000(viewDidAppear) 正如你所看到的, viewWillAppear的框架是好的,但不是viewDidAppear 。 我已经做了以下事情来尝试修复它: – 在loadView , viewDidLoad , viewWillAppear和viewDidAppear设置所需的框架。 – 将我的wantsFullScreenLayout设置为NO 。 – […]

当UIActionSheet改变视图时,工具栏项目消失

从UIActionSheetbutton启动视图时,在通过导航栏后退button返回到视图时,仍然可见的工具栏上没有任何之前的button。 自从升级到iOS 6后,出现此错误,并且仅在运行iOS 6的模拟器和设备上进行testing。 如果我注释掉隐藏在UIActionSheet推送的视图上的工具栏的代码,则在返回时添加button。 我正在viewWillAppear编程我的工具栏项目,并显示我通过self.navigationController.toolbar访问工具栏的UIActionSheet 。 任何想法是什么导致这个问题? 这只是自iOS 6已经出现,所以有什么变化,我需要考虑到viewWillAppear ? 这是如何从actionSheet推送视图: – (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { if (actionSheet.tag == 2) { if (buttonIndex == 0) { [self dismissAllTips]; self.actionNoteAddView= [[self.storyboard instantiateViewControllerWithIdentifier:@"IDActionNoteAddView"] retain]; actionNoteAddView.note_id = 0; actionNoteAddView.iscompleted=0; [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"tool_tips"]; [self.navigationController pushViewController:actionNoteAddView animated:TRUE]; [actionNoteAddView release]; }else if(buttonIndex == 1){ … 这些是推送视图的视图方法: -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; […]

从popup的UINavigationController或UITabBarController中确定viewWillAppear

我无法find一种方法来区分从Nav控制器堆栈popup,并从UITabBarController进入视图控制器。 我只想在ViewWillAppear中调用一个方法,只有在TabBar中显示视图,而不是在有人按下导航控制器的时候。 如果我没有使用TabBarController,我可以很容易地使用viewDidLoad获得这个function。 我试过了, override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) println("View Will Appear") if isBeingPresented() { println("BP") } if isMovingFromParentViewController() { println("from") } if isMovingToParentViewController() { println("to") } } 但是当我按下Tab键或者当按下button时,没有什么区别。 只有“看法会出现”才会被调用。 使用iOS 8.4 / Swift

我可以知道在viewWillAppear它被称为导航控制器popup后(后退button)?

假设我有UIViewController A和B.用户通过push segue从A导航到B. 比用户按下后退button来到A. 现在viewWillAppear的A被调用。 我可以知道在这里的代码,我来自后退button( navigationController popTo… )而不是另一种方式? 而且不用在B视图控制器中编写特殊的代码。

iOS – 循环单元格并检索数据

对不起,我很新的iOS开发。 我从单个XiB笔尖拉出的单元格中有一个UITableView安装程序。 我已经在笔尖上创build了一个开/关开关,并且我试图在viewWillDisappear保存开关的状态,以获得所拥有的单元的数量。 (6个细胞是确切的)。 我如何循环遍历所有单元格并保存这些信息? 我在我的UIViewController中试图获取一个单元格的信息: – (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; UITableView *tv = (UITableView *)self.view; UITableViewCell *tvc = [tv cellForRowAtIndexPath:0]; } 它给了我错误“编程接收到的信号:”EXC_BAD_INSTRUCTION“。 我怎样才能做到这一点?