我按照此链接Changing the value of a property of another UIViewController
的建议我有一个登录页面,它连接到我下载的名为SWRevealViewController的github项目。它本质上为应用程序提供了一个滑出菜单。我需要将一个值从我的登录页面传递给使用SWRevealViewController加载的初始页面。似乎无法让它工作。谁能指出我正确的方向?我试过的是以下内容:
LoginViewController.m
#import "LoginViewController.h"
#import "ProfileTableViewController.h"
@interface LoginViewController ()
@property (strong, nonatomic) ProfileTableViewController *secondViewController;
@end
@implementation dbViewController
-(id)init
{
if (self = [super init]) {
self.secondViewController = [[ProfileTableViewController alloc] init];
}
return self;
}
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
if([identifier isEqualToString:@"Login"]){
[self login:sender];
self.secondViewController.idNumber = _IDNumber;
_secondViewController.idNumber = _IDNumber;
return YES;
}
}
LoginViewController.h
#import <UIKit/UIKit.h>
#import <sqlite3.h>
#import "ProfileTableViewController.h"
@interface LoginViewController : UIViewController
@property (strong, nonatomic)NSString *IDNumber;
@end
ProfileTableViewController.h
#import <CoreLocation/CoreLocation.h>
#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface ProfileTableViewController : UIViewController <CLLocationManagerDelegate, UITextFieldDelegate>
@property (nonatomic) NSString *idNumber;
@end
ProfileTableViewController.m
#import "ProfileTableViewController.h"
#import "SWRevealViewController.h"
#import "ProfileEditFieldController.h"
@interface ProfileTableViewController ()
@end
@implementation ProfileTableViewController
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(_idNumber);
}
@end
只是为了补充说明,两个蓝色控制器是Login,右边是三个控制器,其中一个是控制器我想传递的值为
答案 0 :(得分:2)
你应该这样做:
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
ProfileTableViewController *pvc = (ProfileTableViewController*)[segue destinationViewController];
pvc.idNumber = _IDNumber
}
希望有效! :)
更新:
我认为您需要的是NSUserDefaults,使用它并存储ID。你会在不止一个控制器中需要它,我相信它很容易存储数据。
答案 1 :(得分:1)
这并不是100%清楚你所展示的,但我假设这些视图控制器是在故事板中定义的,而且“Login”segue也在故事板中定义,并导致从LoginViewController转换到ProfileTableViewController。
我很困惑的一件事是为什么LoginViewController.m中的@implementation行说“dbViewController”,但我假设这是一个错字,它应该是“@implementation LoginViewController”。
因此,假设所有这些都是真的,那么代码中就会出现一些问题。首先,您不应该在LoginViewController的init方法中创建ProfileTableViewController。当执行segue时,iOS将自动分配并初始化ProfileTableViewController。
其次,不要使用shouldPerformSegueWithIdentifier:sender:,而是要使用prepareForSegue:sender:。调用该方法时,iOS已经创建了ProfileTableViewController,您可以设置属性。
所以,你想要的是:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Login"])
{
ProfileTableViewController * viewController = segue.destinationViewController;
viewController.idNumber = _IDNumber;
}
}