gpt4 book ai didi

ios - 更新 UISplitView Controller 的两侧

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:19 25 4
gpt4 key购买 nike

我觉得我知道这个问题的答案,但想确认我的想法。

如果我错了,指针会很有帮助,因为我在过去几个小时里一直在乱写代码,也在网上搜索。

我有一个 NSTimer 在设定的时间范围内通过委托(delegate)更新多个 View 。

我认为将我的 View 放在 iPad 和 iPhone 6 Plus 上的 Split View中会很好看。我成功地将我的 View 移动到 Split View Controller 中,但是当我旋转设备时,只有一侧通过委托(delegate)更新(主更新或细节更新),具体取决于旋转设备时我在应用程序中的位置。当设备处于“ Split View模式”时,那一侧继续更新。如果我单击母版中的新行并且母版正在更新(细节没有),那么细节开始更新而母版停止。

我的猜测是,因为委托(delegate)在主队列上触发以更新 View (据我所知,这是更新 View 的唯一方法),所以它只更新当前设置为事件的 View (即主视图即使当我在查看成为详细 View 的内容时旋转,它不在主队列中也是可见的)。是这样吗?不能同时在 Split View的两侧触发更新吗?

我再次寻找更多可能吗?我的应用程序按预期纵向工作,我只是想让它更通用一些,并通过添加 Split View更好地使用房地产。如果我不能同时更新 Split View的两侧,我将重新考虑我尝试走的路。

编辑:感谢您的回答。为了阐明我在做什么,我将添加一些代码:

protocol MasterTimerDelegate {
func masterTimerDidUpdate(item: Item, forGroup group: Group)
func masterTimerDidUpdateAllItems()
func masterTimerDidUpdateProgressForItem(item: Item, forGroup group: Group, withProgressCompleted progress: Double)

}

然后两个 ViewControllers 无论是在 MasterView Area 还是 DetailView area 都在实现那个 Delegate

MasterTimer 类现在每 1 秒触发一个 NSTimer 进行测试,我让它更新标签和各种其他组件。

这是我在 splitView 的 DetailSide 上的代码示例。

func masterTimerDidUpdate(item: Item, forGroup group: Group) {
if group == self.group {

let rowToUpdate = group.items.indexOf(item)
let newPath = NSIndexPath(forRow: rowToUpdate!, inSection: 0)
if let cell = self.tableView.cellForRowAtIndexPath(newPath) as? ItemCell {
cell.configureDurationLabelForItem(item)
}
}
}

我在 MasterView 方面有类似的东西。我在 View 中设置 masterTimer.delegate = self 加载了我要更新的 ViewControllers。我想不出我会把它放在其他地方,因为根据我对已经提供的两个答案/提示的理解,这意味着如果 View 在屏幕上处于事件状态,它就会被加载并且不会留下内存,所以 masterTimer。无论在呈现 View 时,委托(delegate)都应该监听。

更新 #2:我尝试像这样设置设备轮换通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "didRotate:", name: UIDeviceOrientationDidChangeNotification, object: nil)

在我的 didRotate 中我有以下内容:

func didRotate(notification: NSNotification) {
print("device rotated")
selectedCellIndexPath = nil
masterTimer.delegate = self
self.tableView.reloadData()
}

我还在上面的委托(delegate)方法上添加了一个打印语句,以查看它是否正在触发。当设备处于纵向模式时,委托(delegate)将触发。如果我在主视图中选择一个单元格来显示我的组 View ,它也会触发。但如果我有什么将成为屏幕上的主视图,当我在纵向和切换到横向时,它不会开火。通知在旋转时触发,但代表似乎不再收听,因为打印语句在旋转后未触发。

最佳答案

View 并不真正存在于队列中,无论是主队列还是其他队列 - 所有 UIView,无论可见与否,都需要在主队列中更新,因为它们是底层的图形系统...

似乎出于某种原因,一方只是不知道它应该更新,可能是因为您依赖于调用 viewWillAppear 之类的东西,但事实并非如此?

无论如何,您应该能够随时更新任何 View 。

关于ios - 更新 UISplitView Controller 的两侧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32622215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com