Ios 代表以迅捷的语言发言
我有两个控制器,我需要调用函数第一个控制器到第二个控制器: class ViewController: UIViewController, testProtocol {Ios 代表以迅捷的语言发言,ios,uiviewcontroller,swift,ios8,Ios,Uiviewcontroller,Swift,Ios8,我有两个控制器,我需要调用函数第一个控制器到第二个控制器: class ViewController: UIViewController, testProtocol { var secondController: SecondViewController = SecondViewController() override func viewDidLoad() { super.viewDidLoad() seco
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
在第二个控制器中,我在类中创建了协议和初始化委托:
protocol testProtocol {
func testDelegate() // this function the first controllers
}
class SecondViewController: UIViewController {
var delegate: testProtocol?
....
}
@IBAction func testDelegateClicked(sender : AnyObject) {
delegate?.testDelegate()
}
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
第一控制器
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
类ViewController:UIViewController,testProtocol{
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
var secondController:SecondViewController=SecondViewController()
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
重写func viewDidLoad(){
super.viewDidLoad()
secondController.delegate=self
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
}
func testDelegate(){
println(“你好,代表”)
}
但是函数没有被调用。我假设您正在使用故事板。如果我是正确的,那么您的问题是在第一个控制器中创建的
secondController
,不是您正在演示的实际控制器。您需要在prepareforsgue:
中设置secondController
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
第二控制器
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
不变的
第一控制器
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>
如何显示第二个控制器的标准功能(ViewDidLoad和didReceiveMemoryWarning)中的
secondViewController
还有我展示的按钮处理程序,以确保您获得对委托的弱引用。swift中的属性默认为强属性,但我使用secondController=segue!.destinationViewController作为SecondViewController.delegate=self;@Maria,查看我添加的注释。您需要将?
添加到secondController
变量。如果您这样做,您还需要将设置为?
如果我们不使用故事板,如何实现@Firo@PREMKUMAR,您只需创建新的视图控制器(var controller=SecondController()
),设置它的委托(controller.delegate=self
),然后最后显示它(self.navigationController.pushViewController(controller)
)…如果您仍然有问题,请告诉我!
class ViewController: UIViewController, testProtocol {
var secondController: SecondViewController = SecondViewController()
override func viewDidLoad() {
super.viewDidLoad()
secondController.delegate = self
}
func testDelegate() {
println("Hello delegate")
}</pre>