【问题标题】:iOS Passing data between viewsiOS 在视图之间传递数据
【发布时间】:2014-07-11 18:42:18
【问题描述】:

我需要在视图之间传递数据。我真的不知道为什么不工作。 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; }

我挣扎了好几个小时。我真的想不通为什么。 有什么帮助吗? 谢谢

【问题讨论】:

  • 确实我遵循了这样的例子。但仍然无法正常工作。我真的不明白为什么。
  • 已解决。谢谢你。在 viewDidLoad 方法中移动。

标签: ios objective-c uitableview view controller


【解决方案1】:

问题是您在设置属性之前正在查看selectedRow 值。在对init 的调用完成之前,您无法设置selectedRow 属性。

由于您使用该属性是为了设置视图控制器的视图,您应该将该代码移至它所属的viewDidLoad。通常,您不应在视图控制器的init 方法中访问self.view。

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

【讨论】:

    【解决方案2】:

    我使用保存字符串将数据传递给下一个视图控制器。您唯一需要做的就是从数据进入视图控制器的位置导入视图控制器。

    您可以在第一个视图控制器中使用它

    //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];
    

    【讨论】:

    • 为什么要打扰这个?为什么不简单地将数据直接传递给视图控制器?
    【解决方案3】:

    如果你使用 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];
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多