我创建了一个由两个类组成的viewcontroller。这些显示如下:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var Viewholder: UIImageView!
var txt:String?
override func viewDidLoad() {
super.viewDidLoad()
let vv= TestView(frame: Viewholder.frame)
view.addSubview(vv)
txt= "hello"
let rr = TestView(frame: self.view.frame,textvalue:txt!)
rr.colour = "" // set value
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class TestView: UIView {
var textvalue:String?
init(frame: CGRect,textvalue) {
self.textvalue= textvalue
super.init(frame: frame)
self.sharedLayout()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.frame = frame
self.setupPaths()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func sharedLayout() {
print(textvalue!) // works here
}
func setupPaths() {
print(textvalue!) // doesnt work here (displays nil)
}
如何使其工作,以便“setupPaths”中textvalue的值给出正确的值,以便我可以更改标签的文本。我无法让setuppath函数显示传递的值,因为它返回null。这使我无法使用传递的值编辑标签。
答案 0 :(得分:0)
您可以像这样创建一个customView
class TestView: UIView {
var colour:String?
override init(frame: CGRect) {
super.init(frame: frame)
self.sharedLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.sharedLayout()
}
init(frame: CGRect,colour:String) {
self.colour = colour
super.init(frame: frame)
self.sharedLayout()
}
func sharedLayout() {
}
}
//
您可以像这样创建
let rr = TestView(frame: self.view.frame,colour:"test")
// rr.colour = "" // set value
答案 1 :(得分:0)
您对面向对象编程非常困惑。在您的代码中:
let vv= TestView(frame: Viewholder.frame)
view.addSubview(vv)
txt= "hello"
let rr = TestView(frame: self.view.frame,textvalue:txt!)
let vv
行创建一个TestView对象,并将其安装为视图控制器内容视图的子视图。
然后接下来的两行创建一个TestView的新实例,并将文本安装到第二个视图中。然后你忘记了第二个观点。
这就像购买新车,在新车的收音机上设置车站,放弃新车,然后回家,想知道为什么现有车上的广播电台没有改变。这两个对象不是同一个对象,TestView
的一个实例中的设置对TestView
的另一个实例没有影响。