我正在将具有CollectionView的应用程序从Objective C转换为Swift 4.0。我有很多转换,但我遇到了显示子视图然后选择CollectionViewItem类中的按钮的问题。我在主故事板上定义了我的集合视图,并为集合视图项创建了一个单独的类(CollectionViewItem)和xib(就像Ray Wenderlich在CollectionView上的tut一样)。
然后我为子视图(ShowSongInfo)做了同样的事情。
...没有足够的信誉来发布ShowSongInfo视图,但是它不是很简单,只有一个标签和按钮(它会解散控制器)。
我将CollectionViewItem视图中的信息按钮绑定到CollectionViewItem的类的IBAction:
@IBAction func songInfoPressed(_ sender: Any) {
var name = " "
if let song = song {
name = song.fileName
}
let subview = ShowSongInfo(nibName: NSNib.Name(rawValue: "ShowSongInfo"), bundle: nil)
self.view.addSubview(subview.view)
print(name)
}
在ShowSongInfo类中,在ViewDidLoad方法中,我输入了一个print语句来验证是否正在调用Class:
override func viewDidLoad() {
super.viewDidLoad()
print("SongInfoDidLoad")
// Do view setup here.
}
两个打印语句都出现在日志中;没有记录错误,但ShowSongInfo子视图从不显示。
我不确定我的尝试是可行的。在Objective C App中,我使用工作表来显示歌曲标签信息。在这里,我会喜欢表单效果或者可能是popover,但是现在我喜欢ShowSongInfo窗口只是出现。任何帮助或建议将不胜感激。
Hello El,主ViewController(ViewController.swift)设置在带有三个场景的标签视图中; “播放”是初始视图。第二个选项卡是“Playlist”,PlaylistVC.swift作为其ViewController,Extract第三个,ExtractVC是ViewController。 CollectionView在初始视图/场景,播放中设置。
CollectionViewItem被设置为它自己的类和它自己的xib文件。由于它不是主要故事板的一部分,因此它在最初的ViewController.swift扩展名NSCollectionViewDataSource中绑定.-
func collectionView(_ collectionview: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
let item = collectionViewItem.makeItem(withIdentifier: NSUserInterfacetemIdentifier(rawValue: "CollectionViewItem"), for: indexPath)
guard let collectionViewItem = item as? CollectionViewItem else {return item}
let song = directoryDataLoader.songFileForIndexPath(indexPath)
collectionViewItem.song = song
return item
}
目前尚未使用AppDelegate,但我将使用它来集成菜单命令。
希望这有帮助。