- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这道题一定很简单,但我是新手。我有一个 splitView,我试图将其作为主从关系进行管理。用户单击 Master 中的 OutlineView 项,这会触发更新 Detail 端 PopUp 按钮内容的需要。我已经尝试了几个较大代码中的安排测试,从中提取了下面的代码(参见下面代码中标记的测试 1、测试 2、测试 3、测试 4。失败的是测试 3,它失败是因为 displayListPopUP当它被委托(delegate)调用时,它在协议(protocol)函数中为 nil,尽管当类 DetailViewController 最初使用相同的指令加载 PopUp 时它不是 nil。如何修复 TEST 3?
import Cocoa
var displayList: [String] = []
class MasterViewController: NSViewController {
weak var delegate: detailViewControllerDelegate?
let detailViewController = DetailViewController()
override func viewDidLoad() {
super.viewDidLoad()
displayList = ["Problem(s) in Selected Category","EM3", "EM4"]
self.delegate = detailViewController as detailViewControllerDelegate
// TEST 1---THIS WORKS (Bingo is printed)
delegate?.testPrint(val: "Bingo")
}
extension MasterViewController: NSOutlineViewDelegate {
func outlineViewSelectionDidChange(_ notification: Notification){
displayList = ["Problem(s) in Selected Category","EM1", "EM2"]
// TEST 2---THIS WORKS (Bingo 2 is printed)
delegate?.testPrint(val: "Bingo 2")
// TEST 3---THIS DOESN'T WORK (displayListPopUP is nil)
delegate?.loadListPopUP(list: displayList)
}
}
protocol detailViewControllerDelegate: class {
func testPrint(val: String)
func loadListPopUP(list: [String])
}
class DetailViewController: NSViewController, detailViewControllerDelegate {
//I CHECK, XCODE SAYS THIS OUTLET IS ACTIVE
@IBOutlet weak var displayListPopUP: NSPopUpButton!
override func viewDidLoad() {
super.viewDidLoad()
//TEST 4---THIS WORKS (PopUp button is loaded correctly)
displayListPopUP.removeAllItems()
displayListPopUP.addItems(withTitles: displayList)
}
func testPrint(val: String){
print(val)
}
func loadListPopUP(list: [String]){
//THIS DOES NOT WORK. displayListPopUP is nil when called from delegate
displayListPopUP.removeAllItems()
displayListPopUP.addItems(withTitles: list)
}
最佳答案
这似乎解决了问题:
var detailViewController = DetailViewController()
weak var delegate: detailViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
...
detailViewController =
self.storyboard?.instantiateController(withIdentifier: "detailVC") 作为! NSViewController 作为!细节 View Controller
// This is a trick to force the detailViewController to load its hierarchy view, icluding displayListPopUP
_ = detailViewController.view
...
确实,xcode 确实显示了我的 PopUp 的事件导出。 DetailViewController 的初始显示显然是由 macOS 管理的,它有自己的 View 实例化。因此测试 4 确实有效。
创建主从关系显然需要我的 DetailViewController 的新实例化。因为我使用的是 Storyboard,nibs 和 xibs,如果它们存在的话,是眼不见心不烦的。因此,@OOper 的实例化必须替换为显示的实例化。但是,他是对的,实例化不会加载 View 层次结构。那时测试 3 将失败,因为 displayPopUP 仍然为零。 View 层次结构在第一次引用 View 后加载,显示的虚拟调用强制加载层次结构,displayPopUP 现在处于事件状态。测试 3 现在成功了。
关于swift - macOS Swift 主从委托(delegate)/协议(protocol)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49787805/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!