为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置一个简单的委托,以便在两个视图控制器之间进行通信?

如何设置一个简单的委托,以便在两个视图控制器之间进行通信?

iOS
一只名叫tom的猫 2019-06-14 10:20:59
如何设置一个简单的委托,以便在两个视图控制器之间进行通信?我有两个UITableViewControllers并需要使用委托将子视图控制器的值传递给父控件。我知道什么是代表,我只想看到一个简单的榜样。谢谢
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

下面的代码只显示了委托概念的基本用法。您可以根据需要命名变量和类。

首先,您需要声明一个协议:

让我们称之为MyFirstControllerDelegate.h

@protocol MyFirstControllerDelegate- (void) FunctionOne: (MyDataOne*) dataOne;- (void) FunctionTwo: (MyDatatwo*) dataTwo;@end

进口MyFirstControllerDelegate.h存档并确认第一控制器带协议MyFirstControllerDelegate

#import "MyFirstControllerDelegate.h"@interface FirstController : UIViewController<MyFirstControllerDelegate>{}@end

在实现文件中,您需要实现协议的两个功能:

@implementation FirstController 


    - (void) FunctionOne: (MyDataOne*) dataOne      {
          //Put your finction code here
      }
    - (void) FunctionTwo: (MyDatatwo*) dataTwo      {
          //Put your finction code here
      }

     //Call below function from your code
    -(void) CreateSecondController
     {
             SecondController *mySecondController = [SecondController alloc] initWithSomeData:.];
           //..... push second controller into navigation stack 
            mySecondController.delegate = self ;
            [mySecondController release];
     }@end

在你的第二控制器:

@interface SecondController:<UIViewController>{
   id <MyFirstControllerDelegate> delegate;}@property (nonatomic,assign)  id <MyFirstControllerDelegate> delegate;@end

的实现文件中第二控制器.

@implementation SecondController@synthesize delegate;//Call below two function on self.-(void) SendOneDataToFirstController{
   [delegate FunctionOne:myDataOne];}-(void) SendSecondDataToFirstController{
   [delegate FunctionTwo:myDataSecond];}@end

这里是关于委托的wiki文章。


查看完整回答
反对 回复 2019-06-14
?
浮云间

TA贡献1829条经验 获得超4个赞

下面的解决方案是使用委托将数据从VC2发送到VC1的非常基本和简单的方法。

PS:这个解决方案是在Xcode 9.x和SWIFT 4

声明了一个协议,并创建了一个代表变入ViewControllerB

    import UIKit

    //Declare the Protocol into your SecondVC
    protocol DataDelegate {
        func sendData(data : String)
    }

    class ViewControllerB : UIViewController {

    //Declare the delegate property in your SecondVC
        var delegate : DataDelegate?
        var data : String = "Send data to ViewControllerA."
        override func viewDidLoad() {
            super.viewDidLoad()
        }

        @IBAction func btnSendDataPushed(_ sender: UIButton) {
                // Call the delegate method from SecondVC
                self.delegate?.sendData(data:self.data)
                dismiss(animated: true, completion: nil)
            }
        }

ViewControllerA确认协议,并期望通过委托方法接收数据。发送数据

    import UIKit
        // Conform the  DataDelegate protocol in ViewControllerA
        class ViewControllerA : UIViewController , DataDelegate {
        @IBOutlet weak var dataLabel: UILabel!

        override func viewDidLoad() {
            super.viewDidLoad()
        }

        @IBAction func presentToChild(_ sender: UIButton) {
            let childVC =  UIStoryboard(name: "Main", bundle: nil).
            instantiateViewController(withIdentifier:"ViewControllerB") as! ViewControllerB
            //Registered delegate
            childVC.delegate = self
            self.present(childVC, animated: true, completion: nil)
        }

        // Implement the delegate method in ViewControllerA
        func sendData(data : String) {
            if data != "" {
                self.dataLabel.text = data            }
        }
    }


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 515 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信