我有一个简单的应用程序,我想用一个按钮将数据传递给另一个视图控制器,而无需使用它。所以基本上在一个视图控制器上,我有一个文本框,用户在其中输入名称,当他们按下提交按钮时,我希望他们的名字传递给另一个包含标签的视图控制器,但不导航到该视图,停留在具有提交按钮的视图控制器上
这是我提交数据的按钮的IBAction:
@IBAction func addPlant(sender: AnyObject)
{
}
您可以使用委托来实现此目的。
您使用的是 Swift 还是 Objective-C?
创建委托的一般步骤是
- 创建委派协议(定义视图希望控制器处理的内容)
- 在视图中创建一个委托属性,其类型为该委托协议
- 使用视图中的委托属性获取/执行它无法拥有或控制的操作
- 控制器声明它实现了协议
- 控制器通过设置上面的 #2 中的属性将 self 设置为视图的委托
- 在控制器中实现协议
当按下提交按钮时,您可以将用户名记入所有控制器都可以获取它的位置,例如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;
}
}