将数据传输回原始视图



,因此我能够将数据从第一个视图传输到这样的第二视图:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([segue.identifier isEqualToString:@"Check Mark Segue"])
      {
        NSLog(@"Transfering Data");
        AutoRenewDrop *controller = segue.destinationViewController;
        controller.transferData = self.renewDate.text;
      }
}

但是,我尝试将新值传输回renewdate.text,当用户命中完成并且TransferData正常工作时,但是续订dext.text不会更改。这是我用来转移数据的代码:

-(IBAction)done:(UIStoryboardSegue *)segue {
[self.navigationController popViewControllerAnimated:YES];
AddR *add = [[AddR alloc] init];
add.renewDate.text = transferData;
}

有人可以告诉我如何解决此问题吗?

您需要添加一个包含第一个视图的引用的属性:

@interface AutoRenewDrop
@property(weak, nonatomic) AddR *callerView;
@end

,然后在第二视图的完成方法中,您可以在呼叫者视图中更新variale:

-(IBAction)done:(UIStoryboardSegue *)segue {
[self.navigationController popViewControllerAnimated:YES];
callerView.renewDate.text = transferData;
}

当然,当您实例化第二视图时,您必须以这种方式设置参考:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   if ([segue.identifier isEqualToString:@"Check Mark Segue"])
      {
        NSLog(@"Transfering Data");
        AutoRenewDrop *controller = segue.destinationViewController;
        controller.transferData = self.renewDate.text;
        controller.callerView = self; //Here, you are passing the reference to this View
      }
}

您应该使用委托。您可以在此处阅读有关协议和代表的很好的教程。

可以说,您有2个ViewController -VC1和VC2,可以说VC1显示VC2。

在vc2.h

@protocol VC2Delegate <NSObject>
- (void)updateData:(id)theData;
@end
@interface
@property (nonatomic, weak) id<VC2Delegate> delegate;
@end

在vc2.m

@syntesize delegate;
- (void)done
{
    [delegate updateData:myData];
}

在VC1.H

@interface VC1 : UIViewController<VC2Delegate>

在VC1.M

- (void)goToVC2
{
    VC2 *vc2 = [[VC2 alloc] init];
    vc2.delegate = self;
    // present vc2
}
- (void)updateData:(id)data
{
    // update what you need
}

最新更新