使用 IBAction 将数据传递到另一个视图控制器,而无需 segue swift



我有一个简单的应用程序,我想用一个按钮将数据传递给另一个视图控制器,而无需使用它。所以基本上在一个视图控制器上,我有一个文本框,用户在其中输入名称,当他们按下提交按钮时,我希望他们的名字传递给另一个包含标签的视图控制器,但不导航到该视图,停留在具有提交按钮的视图控制器上

这是我提交数据的按钮的IBAction:

 @IBAction func addPlant(sender: AnyObject)
 {  
 }

您可以使用委托来实现此目的。

您使用的是 Swift 还是 Objective-C?

创建委托的一般步骤是

  1. 创建委派协议(定义视图希望控制器处理的内容)
  2. 在视图中创建一个委托属性,其类型为该委托协议
  3. 使用视图中的委托属性获取/执行它无法拥有或控制的操作
  4. 控制器声明它实现了协议
  5. 控制器通过设置上面的 #2 中的属性将 self 设置为视图的委托
  6. 在控制器中实现协议

当按下提交按钮时,您可以将用户名记入所有控制器都可以获取它的位置,例如UserDefault,SQLit。

#import "ViewController.h"
@interface ViewController ()
//where the user enters name
@property (weak, nonatomic) IBOutlet UITextField *userNameTF;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (IBAction)submit:(id)sender {
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    /**
     *  story the userName into NSUserDefaults
     */
    [userDefaults setObject:self.userNameTF.text forKey:@"userName"];
    //if ios8 need:
    [userDefaults synchronize];
}
@end

另一个视图控制器

#import "OtherViewController.h"
@interface OtherViewController ()
@property (weak, nonatomic) IBOutlet UILabel *userNameLabel;
@end
@implementation OtherViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //get the userName from NSUserDefaults
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    self.userNameLabel.text = [userDefaults objectForKey:@"userName"];
}

@end

迅捷版---------------------------------视图控制器:

import UIKit
class ViewController: UIViewController {
    @IBOutlet weak var userNameTF: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    @IBAction func addPlant(sender: AnyObject) {
        let userDefaults = NSUserDefaults.standardUserDefaults();
        /**
        *  story the userName into NSUserDefaults
        */
        userDefaults.setObject(userNameTF.text, forKey:"userName");
        //if iOS8 before need:
        userDefaults.synchronize();
    }

}

其他视图控制器:

import UIKit
class OtherViewController: UIViewController {
    @IBOutlet weak var userNameLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        let userDefaults = NSUserDefaults.standardUserDefaults();
        //get the userName from NSUserDefaults
        self.userNameLabel.text = userDefaults.objectForKey("userName") as? String;
    }
}

最新更新