问题标签 [uinavigationcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 当我“正确”发布推送视图控制器时 iPhone 崩溃
我有一个基于导航控制器的应用程序,我遇到了一个奇怪的问题,我的一些视图控制器推送在“弹出”视图控制器时导致崩溃。
我已将其缩小到在将视图控制器推送到导航控制器的堆栈后释放视图控制器的代码行。
我的代码如下所示:
现在这是正确的内存管理代码,但不幸的是,我收到“双重释放到实例 0x .....”错误(在某些情况下)并且我的应用程序崩溃了。这通常发生在我弹出视图控制器时。
我正在寻找关于看什么的建议。我被困住了。
提前致谢。
编辑:这是下面 Louis 建议的堆栈跟踪转储的结果。
在第一个版本中,保留计数为 13(我猜是由于 CocoaTouch 基类中的一些代码)。最终它归结为:
#对象=0xd09070
如果我省略了上面的违规行([viewController release];),那么保留计数只会使其变为 2,并且实例永远不会被释放。
iphone - UINavigationItem setHidesBackButton:YES 不会阻止返回
这很奇怪,我知道,但即使您将与您的视图关联的 UINavigationItem 的 hidesBackButton 设置为 YES,您也可以只触摸本应作为后退按钮的区域即可返回。
分享我的解决方案...(更多内容)
iphone - 强制加载/卸载视图
如何设置视图控制器以刷新视图中的字段,仅将其推送到导航控制器上并在从导航控制器视图中弹出对象时释放对象。
我的目标是对于视图控制器:
- 仅在将显示推送到导航控制器堆栈时刷新显示
- 从导航控制器堆栈中弹出数据时释放数据
- 尽可能重用控制器(以消除 xib 文件加载/卸载开销)
viewWillBePushed:
和是否有任何委托方法viewWillBePopped:
?
例子
假设我有三层视图:
假设我们有一个类Movie
来表示每部电影。
在这里,我只想UIViewController
在程序运行时拥有三个,每个实例一个。所以我可以MovieInfoController
为不同的电影重复使用相同的内容,并且类似地MovieCreditsController
。
但是,我还想MovieInfoController
仅在将其推送到堆栈时才更新其视图字段(例如标题、发布日期等)。实现显示viewWillAppear
将强制它更新字段,即使在MovieCreditsController
弹出时也是如此。
另外,我想MovieInfoController
释放它的引用Movie
,当它被弹出时,以及任何潜在的大对象(例如封面图像)。实现这个逻辑viewWillDisappear
会导致它MovieCreditsController
在压栈时释放数据。
有合理的吗?我是不是走错了路?
iphone - 如何计算最佳 titleView 宽度?
我正在使用带有自定义UIView
子类的导航,该子类成为我的 titleView。我想确保这是完整的可用宽度。
UIViewController
从我的逻辑上讲viewWillAppear:
,这应该是:
(我这里没有合适的项目。)
那么,这将适应不同的可能宽度leftBarButtonItem
。问题是,所以leftBarButtonItem
总是0 (好吧,无论如何在模拟器中)。nil
leftBarButtonItem.width
backBarButtonItem
也是零。
我应该怎么做?
iphone - 切换到详细视图时不能多次更改 UILabel.text
我有一个 navController 和 tableViewController 设置,这样选择一个表格行将在 navController 的堆栈上推送一个详细视图并显示有关所选行的详细信息。在详细视图中,我使用单个 UILabel 来显示信息,并在详细视图控制器的 viewDidLoad 中设置标签文本属性的值。
我第一次选择一行时,详细视图会显示预期的文本。当我返回表格视图并选择不同的行时,详细视图会显示与第一次相同的文本。
我已经看到了一些代码示例,其中详细视图控制器被释放,然后在被推送到 navController 的堆栈后设置为 nil。如果我将它添加到我的代码中,问题就会消失,但我不明白为什么。
有人可以向我解释这里发生了什么吗?
谢谢!
iphone - UITabBarController UINavigationController 设计建议
这更像是一个哲学问题,所以请给我你的想法。
iPhone SDK 文档指定您可以让标签栏控制器包含导航控制器,但您不能让导航控制器包含标签栏控制器。似乎有时您可能希望以表格方式组织视图中的视图,该视图是导航控制器堆栈的一部分。这不合理吗?
我接受 Apple 在这些领域的规定作为福音,因为 HIG 确实提供了似乎揭示阻力最小的路径的最佳实践(我相信这也有例外)。但是,在标签栏的情况下,我不确定其背后的设计原因。也许这对其他人来说是显而易见的,但我想不出一个很好的理由为什么你不允许标签作为根级视图控制器之外的任何东西。
大家觉得/知道什么?这会造成什么设计缺陷?您将如何解决希望在视图中以表格形式表示视图的问题?我需要重新考虑整个设计吗?
谢谢。
objective-c - 类似于 Mobile Safari 的可滚动 UINavigationBar
我的应用程序使用 aUINavigationController
并且最终视图(详细视图)允许您使用UIWebView
.
当用户查看网页并想要模拟 iPhone 上的 Safari 的工作方式时,我想释放一些额外的屏幕空间,当您查看内容时,顶部的 URL 栏会向上滚动并离开UIWebView
屏幕首屏以下。
有人对如何实现这一目标有想法吗?如果我设置navigationBarHidden
属性并在顶部滚动我自己的自定义栏并将其设置UIWebView
在 a 中,UIScrollView
那么会出现滚动问题,UIWebView
因为它不能很好地与其他可滚动视图配合使用。
iphone - 从自定义 UITableViewCell 中调用模式窗口
我有一个 UITableView 并在其中我以以下方式创建了一个自定义 UITableViewCell:
我这样做是为了获得 touchesBegan 和 touchesEnded 事件(这样我就可以实现长触摸)。使用 NSLog 我可以看到使用以下代码从 touchesBegan 方法中正确调用了 longTouch:
问题是我无法从 longTouch 方法中调用模式窗口。
我尝试了以下方法,但我得到一个 NSInvalidArgumentException -[ItemCellController navigationController]: unrecognized selector sent to instance 错误。
所以问题是,如何从自定义 UITableViewCell 中调用模式窗口。
谢谢
iphone - 将 rootViewController 添加到 UINavigationController 时出现问题
我对以下代码有疑问:
当我运行我的程序时,我遇到了一个问题,我的 myController 视图沿 y 轴一直重复,直到屏幕底部。如果我将 myController.view 添加到根视图,它可以正常工作。只有当我将 myController 添加为导航控制器的 rootViewController 时,我才会遇到问题。
提前感谢您的帮助!
iphone - 用 UIToolbar 替换 UINavigation?
我已经构建了一个基于导航的应用程序,但是现在我已经深入到代码中,我决定实际上最好只使用一个 UIToolbar(只需要模式视图,而不是向下钻取)。但是解开导航的东西并用工具栏代替它给我带来了各种各样的悲伤......
有没有人这样做过,也许有一两个指针?或者甚至知道某个地方链接的演练?
谢谢!