gpt4 book ai didi

ios - NavigationController 中的 View 之间的序列无法正常工作

转载 作者:行者123 更新时间:2023-11-30 10:52:50 25 4
gpt4 key购买 nike

我有一个应用程序,其中包含一个设置 View ,该 View 是使用带有原型(prototype)单元格的 UITableView 设置的。填充后,每个单元格都会进入后续设置页面。这些后续设置页面应该允许用户导航回主设置页面(并最终退出设置返回主菜单)。

每个设置页面的底层机制都可以独立正常工作。我遇到的问题是将这些全部绑定(bind)在导航流程中。

第一种方法

最初,我将设置屏幕编码为许多不同的 View Controller ,并从主设置屏幕创建到每个 View Controller 的手动转场(并手动创建回到主设置屏幕的转场)。主设置屏幕本质上是一个带有原型(prototype)单元的可视化自定义 UITableView。这种方法按预期工作,但相当笨拙,需要在每个屏幕上手动编码每个转场。

新方法(不起作用)

为了使事情更清晰、更易于管理(代码方面),我尝试使用导航 Controller 来实现相同的效果,并将我的主设置页面嵌入到导航 Controller 中(这可能不是正确的术语,但本质上,主设置页面就是您通过导航 Controller 进入 Storyboard时看到的内容)。从那里,我使用 segues 将主设置页面连接到每个辅助设置页面。

使用导航 Controller 方法,主设置页面可以正确加载并正常工作(即:正确的内容加载、表格滚动、开关工作等),但每当点击单元格时,都会调用segue辅助设置页面,似乎什么也没有发生...但是我可以看到打印行已针对选定的辅助设置页面运行,而主设置页面只是卡住并变得不起作用。

主要设置屏幕的简单演示导致下一个:https://imgur.com/qnzb36j.png

Segue 标识符和详细信息: https://imgur.com/W3Gn7WS.png

以下代码用于主设置屏幕中以启动到计时器屏幕的转场(例如)。计时器屏幕的 Segue 具有标识符“ShowTimerView”。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)

print("\(indexPath.row) was selected.")

if indexPath.row == 1 {
// Action when timer button pressed
print("Timer button pressed.")
print("-----Segueing to Timer view.")
self.performSegue(withIdentifier: "ShowTimerView", sender: nil)
}
}

如前所述,点击计时器单元格导航到计时器屏幕会导致主设置屏幕变得无响应,并且计时器屏幕永远不会出现。我可以知道计时器屏幕已加载/运行,作为计时器页面的 ViewController 中的打印行运行并出现在终端中。

我尝试过各种不同的方法来让它发挥作用。我认为我犯了一个愚蠢的错误,因为当我将转场类型从“显示”更改为“模态呈现”时,计时器屏幕会加载并出现......但导航栏不会加载,所以没有办法导航回到主设置屏幕。

仅供引用,当从主菜单导航到主设置屏幕时,我确实得到了以下终端输出...不确定它是否对解决问题有任何帮助:

Settings button pressed.
-----Segueing to Settings view.
2019-01-20 20:54:58.979042+0000 ThirtySeconds[14618:388866] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x600001f68690 UILabel:0x7fb2a1d636b0'Settings'.top >= UILayoutGuide:0x600000560fc0'TitleView(0x7fb2a1c62740)'.top (active)>",
"<NSLayoutConstraint:0x600001f685a0 UILabel:0x7fb2a1d636b0'Settings'.firstBaseline == UILayoutGuide:0x600000560fc0'TitleView(0x7fb2a1c62740)'.top + 28 (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001f68690 UILabel:0x7fb2a1d636b0'Settings'.top >= UILayoutGuide:0x600000560fc0'TitleView(0x7fb2a1c62740)'.top (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

然后,一旦我按下“计时器”单元格,就会出现以下输出:

Timer button pressed.
-----Segueing to Timer view.
2019-01-20 20:55:38.339771+0000 ThirtySeconds[14618:388866] [Answers] Logging Answers event: <ANSPredefinedEvent: content_view
{
"content_id" = "N/A";
"content_name" = Timer;
"content_type" = "Settings Screen";
}
{
}>
2019-01-20 20:55:38.359086+0000 ThirtySeconds[14618:389499] [Answers] Logging predefined event to Firebase. <select_content
{
"content_type" = "Settings Screen";
"item_id" = "N/A";
"item_name" = Timer;
}>
2019-01-20 20:55:38.365187+0000 ThirtySeconds[14618:388866] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<NSLayoutConstraint:0x600001f6ab20 UILabel:0x7fb2a1d73f60'Timer'.top >= UILayoutGuide:0x600000561ce0'TitleView(0x7fb2a1c110a0)'.top (active)>",
"<NSLayoutConstraint:0x600001f6a850 UILabel:0x7fb2a1d73f60'Timer'.firstBaseline == UILayoutGuide:0x600000561ce0'TitleView(0x7fb2a1c110a0)'.top + 28 (active)>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001f6ab20 UILabel:0x7fb2a1d73f60'Timer'.top >= UILayoutGuide:0x600000561ce0'TitleView(0x7fb2a1c110a0)'.top (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

最佳答案

啊!事实证明,问题是我在子类导航 Controller 中所做的高度修改。删除此修改会导致所有内容按预期运行和行为。

关于ios - NavigationController 中的 View 之间的序列无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280948/

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