我需要在视图之间传递数据。我真的无法弄清楚为什么不工作。 SecondViewController中的变量selectedRow始终为空。
FirstViewController.m
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
SecondViewController *newView = [[SecondViewController alloc] init];
newView.selectedRow = [tablelist objectAtIndex:indexPath.row];
newView.title = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;
[self.navigationController pushViewController:newView animated:YES];
}
SecondViewController.h
@interface SecondViewController : UIViewController
{
NSString *title,*selectedRow;
}
@property(nonatomic,retain) NSString *title;
@property (nonatomic,retain) NSString *selectedRow;
@end
SecondViewController.m
@synthesize title,selectedRow;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 64, 320, 370)];
textView.text = selectedRow;
textView.editable = FALSE;
[self.view addSubview:textView.text];
}
return self; }
我挣扎了好几个小时。我真的不知道为什么。 有帮助吗? 谢谢
答案 0 :(得分:1)
问题是您在设置属性之前查看selectedRow
值。在调用selectedRow
之后,您才能设置init
属性。
由于您使用该属性是为了设置视图控制器的视图,因此您应该将该代码移动到它所属的viewDidLoad
。通常,您不应在视图控制器的self.view
方法中访问init
。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
textView = [[UITextView alloc]initWithFrame:CGRectMake(0, 64, 320, 370)];
textView.text = selectedRow;
textView.editable = FALSE;
[self.view addSubview:textView.text];
}
答案 1 :(得分:0)
我使用了savetrings将数据传递给下一个viewcontroller。您唯一需要做的就是从viewcontroller中的数据导入视图控制器。
您可以在第一个viewcontroller中使用它
//1e savestring
NSString *saveString1 = emailfield.text;
NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
[defaults1 setObject:saveString1 forKey:@"saveString1"];
[defaults1 synchronize];
在视图控制器中你需要加载数据
//First load string
NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
NSString *loadString1 = [defaults1 objectForKey:@"saveString1"];
[emailfield setText:loadString1];
答案 2 :(得分:0)
如果你使用storyboard来获取一个viewcontroller,你可以试试这个。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *storyboard = [ UIStoryboard storyboardWithName:@"Main" bundle:nil ];
SecondViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"test" ];
vc.title = @"something";
[self.navigationController pushViewController:detailView animated:YES];
}