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

时间:2016-03-01 16:47:30

标签: ios xcode swift uiviewcontroller ibaction

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

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

 @IBAction func addPlant(sender: AnyObject)
 {  
 }

2 个答案:

答案 0 :(得分:0)

按下提交按钮后,您可以将用户名编辑到所有控制器可以获取的位置,例如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

Swift Version --------------------------------- 的ViewController:

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();
    }



}

OtherViewController:

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;

    }
}

答案 1 :(得分:0)

您可以使用代理来实现这一目标。

你使用的是swift还是objective-c?

创建委托的一般步骤是

  1. 创建委派协议(定义View希望Controller处理的内容)
  2. 在View中创建一个委托属性,其类型是委派协议
  3. 使用View中的delegate属性来获取/执行它不能拥有或控制的内容
  4. Controller声明它实现了协议
  5. Controller通过设置<#li>上面#2中的属性,将self设置为View的委托
  6. 在Controller中实施协议