第二个视图控制器没有数据

时间:2016-05-27 14:29:53

标签: ios objective-c uiviewcontroller delegates

我有实现的委托方法将数据从 FirstViewController 传递到 SecondViewController

首先,我在FirstViewController中创建了文本字段按钮。其次,我创建了一个标签来显示SecondViewController中的数据。

如何运作: 用户将按FirstViewController中的按钮,它会将数据传递给secondViewController。此外,用户将使用 UISwipeGestureRecognizer 导航到第二个视图控制器,因此无需使用按钮转到第二个视图控制器。

我如何测试应用

1- 我运行应用。 - > 2- 我在文本字段中输入“Hello” - > 3- 我按下按钮 - > 4- 我滑动到第二个视图控制器以查看数据 - > 5- 我在标签中看不到任何数据?

首先我创建了委托协议

FirstViewController.h

@class FirstViewController;

@protocol FirstControllerDelegate

-(void) updateLabel:(NSString*)string

@end

@property (weak, nonatomic) id<FirstViewControllerDelegate>delegate;
@property (weak, nonatomic) IBOutlet UITextField *TextField;
- (IBAction)button:(id)sender;

FirstViewController.m

@interface FirstViewController. ()
@end
@implementation ViewController1
@synthesize delegate;
@synthesize TextField;

-(void)viewDidLoad{
    [super viewDidLoad];
}
- (IBAction)Button:(id)sender {

  ViewController2 *vc2 = [[ViewController2 alloc] init];
   vc2.stringfromTextfield1 = self.TextField.text;

}

SecondViewController.h

#import "SecondViewController.h"
#import "FirstViewController.h"
@interface SecondViewController : UITableViewController<FirstControllerDelegate> 
@end
@property (weak, nonatomic) IBOutlet UILabel *Label;
@property (strong, nonatomic) NSString *stringfromTextfield1; 

SecondViewController.m

@interface SecondViewController. ()
    @end
    @implementation SecondViewController

    -(void)viewDidLoad{
        [super viewDidLoad];

     self.label.text = self.stringfromTextfield1;

    }

感谢您花时间和精力帮助我

3 个答案:

答案 0 :(得分:1)

您可以使用Singleton类,或者使用extern NSString将字符串值1移动到第二个View Controller。

在第一个视图控制器中。

extern NSString *MyStr;

@interface中定义它。

@interface{
NSString *MyStr;
}

@Implementation中指定您想要的值。

和第二个视图控制器只是#import第一个视图和使用,

MyStr作为变量,它的值也来自第一个视图控制器。 这件事对我有用。

答案 1 :(得分:1)

或者只是添加一个AppDelegate属性来将变量存储在两个ViewControllers中:

AppDelegate *appDel=[[UIApplication sharedApplication] delegate];
appDel.variable=@"text";

答案 2 :(得分:1)

您可以将数据保存在App委托中,并通过应用程序中的视图控制器访问它。您必须创建一个app delegate的共享实例。

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

喜欢这个

假设您声明了NSString object *str,那么您可以通过appDelegate.str

在任何视图控制器中访问它