- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:
我有一个包含 2 个单元格的 tableView,我正在尝试使用 3DTouch 实现 Peek & Pop。
我设法使每个单独的单元格都可以查看并与其他单元格相比将其提升,但是一旦我想弹出它并重定向到其他 View Controller ,我的应用程序就会崩溃
这是我的 1stVC 代码:我在 viewDidLoad 中注册预览:
if( traitCollection.forceTouchCapability == .available){
registerForPreviewing(with: self, sourceView: self.tableView)
}
然后我通过实现 2 个方法来遵守协议(protocol) UIViewControllerPreviewingDelegate
:
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView?.indexPathForRow(at: location) else { return nil }
previewingContext.sourceRect = tableTest.rectForRow(at: indexPath)
let sb = UIStoryboard(name: "Main", bundle: nil)
guard let detailVC = sb.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return nil }
return detailVC
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit :UIViewController) {
show(viewControllerToCommit, sender: self)
}
在 func tableView(...didSelectRowAt)
中:
if (indexPath.row == 0) {
guard let controller = storyboard?.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return }
controller.titlePassed = cell?.textLabel?.text
controller.variableIn2ndVC = theVariabletoSend
controller.anotherVarIn2nd = theVariabletoSend2
...
...
navigationController?.present(controller, animated: true, completion: nil)
}
我的第二个 View Controller 的代码:
var titlePassed: String?
var variableIn2ndVC: String?
var anotherVarIn2nd: String?
...
...
@IBAction func cancelButton(_ sender: AnyObject) {
self.dismiss(animated: true, completion: nil)
}
...
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 && titlePassed == "FROM" {
return 1
} else {
return Stations.count
}
}
public func numberOfSections(in tableView: UITableView) -> Int {
if titlePassed == "FROM" {
return 2
} else {
return 1
}
}
在 didSelectRowAt
中,我有一些回调将一些数据发送到第一个 Controller
当用户点击单元格时,我获取 textLabel
中的文本并使用回调将其发送给第一个 VC
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 1 && titlePassed == "FROM" {
let stringToSendBack = cell?.textLabel!.text
// put str in callBack in order to access it in the 1st VC
callBack?(str!)
dismiss(animated: true, completion: nil)
}
最佳答案
我想你已经解决了,但我只是总结一下你已经得出的结论,仅供记录。
让我们暂时忽略 peek 和 pop。然后,当您通常响应用户在单元格上的点击从主 Controller 转到细节 Controller (DestinationViewController) 时,您可以这样做(代码缩写):
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
guard let controller = storyboard?.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return }
controller.titlePassed = cell?.textLabel?.text
controller.variableIn2ndVC = theVariabletoSend
controller.anotherVarIn2nd = theVariabletoSend2
navigationController?.present(controller, animated: true, completion: nil)
}
到目前为止,还不错。现在让我们来看看图片。这是一个完全不同的情况。您可以像这样创建导航 Controller (同样是缩写):
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
let sb = UIStoryboard(name: "Main", bundle: nil)
guard let detailVC = sb.instantiateViewController(withIdentifier: "DestinationViewController") as? DestinationViewController else { return nil }
return detailVC
}
看出区别了吗?
在第一种情况下,您要创建 DestinationViewController 并配置它。
在第二种情况下,您创建了 DestinationViewController 但完全忽略了配置它。因此,它是未配置的,它的所有属性都是 nil
。
该事实稍后会以某种方式 catch 您,并导致崩溃。
如果您想先查看然后弹出,也就是说,在 3D 触摸后呈现 DestinationViewController,就像用户只是点击单元格时所做的那样,您必须做您希望做的所有事情如果用户只是点击了单元格就完成了。您可以在两个 UIViewControllerPreviewingDelegate 方法中的任何一个中执行此操作,但是如果您在第一个方法中没有这样做,则必须肯定在第二个方法中执行此操作,因为这是实际呈现 View 的方法 Controller 。否则,您将呈现一个损坏的 View Controller (如您所知)。
因此,总而言之,您的问题是由 tableView(_:didSelectRowAt)
和两个 UIViewControllerPreviewingDelegate 方法以某种方式交织在一起的假设引起的。他们不是。这是两种完全不同的情况——用户点击,或者用户 3D 按下。您需要为它们中的每个创建和配置 View Controller 的完整实现。
关于ios - 3D Touch、peek 和 pop 崩溃并出现 fatal error : unexpectedly found nil while unwrapping an Optional value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865331/
所以下面的内容让我很困惑。 #!/usr/bin/python test = [0, 0, 0, 1, 2, 3, 4, 5, 6] test1 = [0, 0, 0, 1, 2, 3, 4, 5,
这个问题是这个问题的后续问题: deque.popleft() and list.pop(0). Is there performance difference? 在 Python 中,我可以使用 .
我正在使用 bootstrap v2.2.2。我尝试了其他一些方法(即: close popover outside popover but inside stay open 和 How to dis
我正在用 Python 创建提交后脚本并使用子进程调用 git 命令。 在我的脚本中,我想在运行某些命令之前存储所有更改,然后将它们 pop 。问题是,如果没有任何东西可以存储,stash pop 会
我有一个嵌入在 UINavigationController 中的 UITableViewController,我正在尝试将 Peek & Pop 实现到 TableView 中。我的“窥视”部分工作
我的 Windows 机器上安装了 Cygwin、msysgit 和 TortoiseGit。我正在为 Cygwin 编写一个脚本,该脚本通过 ssh 将 git 推送到远程机器: git push
我在 Jenkins 中使用groovy,并且我需要这个字符串来获取其中的最后一个单词。假设字符串是 STATUS = "EXECUTE SIT" 。所以我所做的就是分割字符串,这样我就会得到一个数组
本文是不太具体的问题的后续/重新表述 Is it possible to have a hyperlink inside {content:"..."}? . 用户 Naeem Shaikh ,非常感
Navigator.of(context).pop 和 Navigator.pop(context) 有什么区别? 对我来说两者似乎都在做同样的工作,实际的区别是什么。一个被弃用了吗? 最佳答案 Na
这可能吗?我想要一个更简单的命令来 git stash pop stash@{13} 其中 stash@{13} 只是 last 意思是“最后的存储在列表上”或“最古老的藏品”。 我知道我可以为 gi
Closed. This question is not reproducible or was caused by typos。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-to
Visual Studio 2019 中用于 GIT 存储的以下命令有什么区别? 分阶段 pop 和恢复 (--index) 全部 pop 为未暂存状态 使用https://visualstudio.
我想弹出模型的最后一层。所以我使用了 tf.keras.layers.pop(),但它不起作用。 base_model.summary() base_model.layers.pop() base_m
我想使用 navigator.pop 将值从第 2 页传递到第 1 页,并使用 initstate 中的新值刷新或重新加载我的第 1 页或任何其他解决方法? 我能够在第一页中获取这些值,但无法使用 i
pop 函数的文档说: user> (doc pop) ------------------------- clojure.core/pop ([coll]) For a list or queu
我有以下点击处理程序,当点击它时,我从 handsontable 中提取一个数组然后从数组中删除最后一个元素,并将新数组传递给 ajax post。问题是,如果我再次单击该按钮,它将从数组中删除另一个
我在mailmuch中制作了表单并从中获取了代码,我添加到网页并使用href,当用户单击显示弹出窗口时显示表单。没关系 show popup 但是现在我有ajax请求,我希望在ajax返回成功时显示此
我目前正在学习 Python 中的 pop() 函数并有一个问题。 >>> a = [1,2,3,4] >>> a.pop(3) #or a.pop() 4 >>> print(a) [1,2,3]
我目前正在学习 Python 中的 pop() 函数并有一个问题。 >>> a = [1,2,3,4] >>> a.pop(3) #or a.pop() 4 >>> print(a) [1,2,3]
我可以将对象$push编码到Mongo数组上,如下所示: db.foo.update({},{$push:{bar:3}}) 但是我找不到一种语法,可以让我对列表中的最后一项进行$pop编码。 我已经
我是一名优秀的程序员,十分优秀!