所以我是swift的新手,我从子类中获取了一些关于访问属性的知识。在这种情况下,我认为我的问题比这更复杂。
我有一个tableview,它可以分割成详细视图(BuyStats)。在'prepare'方法中,我为BuyStats类设置了属性“selectedPlayer”。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "BuyStats" {
let buyStats = segue.destination as! BuyStats
if let indexPath = tableView.indexPathForSelectedRow {
let player = players[indexPath.row]
buyStats.selectedPlayer = player
}
}
selectedPlayer在这里运行正常,我可以轻松访问其.Name属性。
class BuyStats: UIViewController {
var selectedPlayer: Player! = nil
@IBOutlet weak var selectedPlayerNameLabel: UILabel!
@IBOutlet weak var spendAmount: UILabel!
override func viewDidLoad(){
let rightBarButton = UIBarButtonItem(title: "Enter", style: UIBarButtonItemStyle.plain, target: self, action: #selector(myRightSideBarButtonItemTapped(_:)))
self.title = "Buy Stats"
self.navigationItem.rightBarButtonItem = rightBarButton
selectedPlayerNameLabel.text = selectedPlayer.Name
}
但是在详细视图中我还有一个容器视图,它包含一个导航控制器和一个BuyStats的子类。我还需要能够访问子类中的selectedPlayer(BuyStatsTapPager),但它无法正常工作。
如果我的设置有点令人困惑,请提供故事板图片。
这是我需要从超类访问selectedPlayer属性的地方。
class BuyStatsTabPager: BuyStats{
@IBOutlet var segmentedControl: UISegmentedControl!
@IBOutlet weak var scoreKey: UIBarButtonItem!
@IBOutlet weak var standings: UIBarButtonItem!
override func viewDidLoad() {
navigationController?.navigationBar.barTintColor = UIColor(red: 27/255, green: 27/255, blue: 27/255, alpha: 1)
scoreKey.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal)
scoreKey.tintColor = UIColor.blue
standings.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica", size: 13.0)!], for: UIControlState.normal)
standings.tintColor = UIColor.blue
但是下面的print语句给了我一个exc_bad_instruction错误。如果在超类中成功设置,它不应该在子类中可用吗?
print(super.selectedPlayer.Name)
}
'selectedPlayer'出现在IDE中而没有调用super,所以我也试过了。
print(selectedPlayer.Name)
我对谷歌没有任何好运,我一直在尝试的所有其他解决方案都有点古怪,所以我想我最好问一个人。
答案 0 :(得分:0)
您的故事板在您的情况下看起来像您的segue的目的地不是BuyStats
而是导航控制器。在prepare(for: sender:)
方法中,试试这个:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "BuyStats" {
let nav = segue.destination as! UINavigationController
let buyStats = nav.viewControllers[0] as! BuyStatsTabPager
if let indexPath = tableView.indexPathForSelectedRow {
let player = players[indexPath.row]
buyStats.selectedPlayer = player
}
}