,因此我能够将数据从第一个视图传输到这样的第二视图:
- (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
}