2

我在 secondViewController 中有 UITextField,在同一个视图中有一个按钮。

我想将该 UITextField 文本作为字符串传递给 firstViewController。

这是我的代码。

第二视图控制器.m

-(void)backToFirstView
{

NSString *str=disTxtFld.text;
FirstView *firstView=[[FirstView alloc]init];
firstView.discountStr=str;
[self.navigationController popViewControllerAnimated:YES];

}

第一视图控制器.h

@property (nonatomic,strong) NSString   *disStr;

第一视图控制器.m

@synthesize disStr;

 -(void)viewWillAppear:(BOOL)animated
 {
 NSLog(@"discount:%@",disStr);
 }

当我试图在第一个视图中打印该字符串时..它显示空值..

有什么建议么...

4

4 回答 4

3

最简单的方法是使用委托。请看这里: http: //krodev.wordpress.com/2012/10/08/objective-c-delegates/ 这是如何定义和实现委托的分步指南。

代表习惯于做你正在寻找的事情。

于 2013-08-13T13:16:11.480 回答
0

最好的方法:在你的故事板中使用 unwind segue 来回到之前的 VC 并传递数据。有关这方面的更多信息,请观看 2012 年的 Storyboards WWDC 会议。

其他方式:使用委托模式。在您的 SecondViewController 类中创建一个名为 SecondViewControllerDelegate 的协议。给它像“secondViewControllerDidFinish:”和“secondViewControllerDidCancel:”这样的方法。让 FirstViewController 符合该协议并为这些方法提供实现。在这些实现中,确保显示的 SecondViewController 被解除。在 SecondViewController 中,创建一个类型为 id 的委托属性。

当 FirstViewController 呈现 SecondViewController 时,将其设置为 SecondViewController 的委托。当 SecondViewController 完成任何需要完成的工作时,让他们调用委托方法并传入相关数据。

于 2013-08-13T13:21:19.083 回答
0

在 1st-viewController 中创建一个函数

-(void)setStringFromSecondView:(NSStirng *)_value{
my_String=[NSString stringwithFormate:@"%@",_value];
}

并将其添加到头文件中

-(void)setStringFromSecondView:(NSStirng *)_value;

现在在 secondViewController 中添加一个委托变量

{
id delegateOfPrevious;
}

-(void)setDelegate:(id)_delegate{
delegateOfPrevious=_delegate
}

现在在第一个 viewController 中推送第二个视图控制器之前,您必须像这样设置 FirstView 的委托

secondViewController *secondView=[[secondViewController alloc] init....];
secondView.setDelegate=self;

......现在一切都设置好了。你离成功只有一步之遥:

在弹出 SecondViewController 之前,您可以在第二个视图控制器中调用此函数,它将在第一个视图控制器中设置值。

[delegateOfPrevious setStringFromSecondView:textView.txt];

不要忘记在 SecondViewController 中包含 firstViewController.h。我前一天为我自己的项目做了这个,它工作正常。

于 2013-08-13T13:29:40.430 回答
-2

一个最好的方法是在应用程序 delegate.h 中将您的 nsstring 声明为全局,在第二个视图控制器中合成它并用数据填充它,然后尝试在第一个视图控制器中访问这个 nsstring。

于 2013-08-13T13:14:39.467 回答