您好,我目前正在 Swift 3 中开发一个应用程序。我在嵌入导航控制器的表视图控制器中遇到问题。我当前正在显示 navigationController 工具栏。但是,在初始表视图控制器上,我将导航栏设置为隐藏。这会导致工具栏被调整大小和重新定位。
有谁知道我如何重新加载工具栏以遵循以下代码行:(这在视图中会出现)
self.navigationController?.toolbar.frame = CGRect(x: 0, y: UIScreen.main.bounds.height-80, width: self.view.frame.size.width, height: 80)
Run Code Online (Sandbox Code Playgroud)
我无法找到如何使用以下命令隐藏导航栏后调整工具栏的大小:(这在视图中确实出现)
self.navigationController?.setNavigationBarHidden(true, animated: true)
Run Code Online (Sandbox Code Playgroud) 我想知道如何将UIColors数组保存到用户默认值.
我有以下代码将单个UIColor保存到用户默认值,有没有人知道如何修改它以允许我在NS用户默认值中存储UIColor数组?
extension NSUserDefaults {
func colorForKey(key: String) -> UIColor? {
var color: UIColor?
if let colorData = dataForKey(key) {
color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as? UIColor
}
return color
}
func setColor(color: UIColor?, forKey key: String) {
var colorData: NSData?
if let color = color {
colorData = NSKeyedArchiver.archivedDataWithRootObject(color)
}
setObject(colorData, forKey: key)
}
}Run Code Online (Sandbox Code Playgroud)
为了清晰起见,我有一个UIView Controller顶视图,其中包含一个textfield。我也有一个tableview下面,每行包含1 textfield。
问题:当我使用"didEndEditing"任何文本字段时,这意味着顶视图中的一个和表视图中的一个,我想将此信息保存到核心数据并重新加载tableview。
完美运行,除了!当我(在任意位置)选择一个文本字段时,输入一个值,然后从一个文本字段中选择一个值,然后选择另一个文本字段。 这会导致键盘卡死,并且永远不会消失。
我已经诊断出这是因为"DidEndEditing"调用时由于重新加载了单元格,所以我对刚刚选择的文本字段(键盘处于打开状态)的引用丢失了。
有人遇到过吗?有没有人找到一种精巧的解决方案,可以tableview cell在选择textfield内部数据时将数据重新加载到某个位置?
编辑:我尝试将其移动reloadData()到"DidBeginEditing"文本字段的功能,并成功使选择指示符出现,但是再次键盘没有参考,即使我呼叫之后成为第一响应者tableView.relaodData()
我目前如何使用核心数据:
我的应用程序加载:在此页面上,我创建一个托管对象上下文,获取托管对象,并加载/显示它们.这是一个tableview,所以我允许删除.为了删除我创建一个托管对象上下文并删除托管对象并重新加载tableview.在我的应用程序中使用了相同的方法,还有其他操作,例如更新等. 重点是每个动作我创建一个新的托管对象上下文.
我目前对核心数据的理解是,托管对象上下文有点像队列,它充满了行为.其中,托管对象是正在修改的项目,并放入队列以执行操作.使用这个逻辑,整个应用程序中不应该只有一个队列吗?
主要问题:
我是否需要在每个操作之前创建托管对象上下文?或者我可以创建一个托管对象上下文说在应用程序委托确实完成启动?并在整个应用程序中使用它?
编辑:
对于未来的观众(如果我理解提供的答案),我的代码现在通常如下所示:
ManagedObjectContext.在我需要更改我的核心数据对象的整个应用程序中,我执行以下操作:
if let managedContext = ShareData.sharedInstance.managedObjectContext {
// DO STUFF, update, delete, create ect ect ect
}
编辑2:我可能误解了"不要在App代理中创建MOC",目前正在研究这个并尝试学习创建MOC的最佳位置.在其他地方创建一个似乎很乏味,如果每个视图都可以启动应用程序,则需要MOC.