将值传递给第一个视图的文本字段

时间:2011-12-23 16:26:11

标签: iphone objective-c ios uitextfield

导航控制器有两个视图:第一个视图,有空文本字段,第二个视图是用户可以选择行的表视图。只需触摸一行,就会有一个动作将值设置为第一个视图的文本字段。不幸的是,当我回到第一个视野时,没有设置。

这是我的代码:

FirtViewController.h

      @interface FirstViewController : UIViewController 
      {
          UITextField *firstField;
          UITextField *secondField;
      }
      @property(nonatomic, retain) IBOutlet UITextField *firstField;
      @property(nonatomic, retain) IBOutlet UITextField *secondField;
      @property(copy) NSString *selectedRow;
      -(IBAction)showTable:(id)sender

FirstViewController.m

      #import "FirstViewController.h"
      #import "AppDelegate.h"
      #import "SecondViewController.h"

      @implementation FirstViewController
      @synthesize  .....
      .............


      -(void)viewDidAppear:(BOOL)animated 
      {
        [super viewDidAppear:animated];
        self.firstField.text = selectedRow;
      }

      -(IBAction)showTable:(id)sender
      {
         SecondViewController *controllerSecond = [[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil];
         [self.navigationController pushViewController:controllerSecond animated:YES];
      }

SecondViewController.h

      @class FirstViewController;

      @interface ListaViewController : UIViewController 
      <UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate>
      {
         UITableView *table;
         UISearchBar *search;
         FirstViewController *controller;
      }
      @property (nonatomic, retain) FirstViewController *controller;

SeconViewController.m

      - (void)tableView:(UITableView *)tableView 
         didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

            NSString *selectedRow = [tableData objectAtIndex:indexPath.row];

            controller.selectedRow = selectedRow;
            [self.navigationController popViewControllerAnimated:YES];
      }

4 个答案:

答案 0 :(得分:1)

根据您上面的代码,您永远不会将secondViewController中的连接设置回第一个 你可能需要这样的东西:

  -(IBAction)showTable:(id)sender
      {
         SecondViewController *controllerSecond = [[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil];
         [controllerSecond setController:self];  //this sets the reference back
         [self.navigationController pushViewController:controllerSecond animated:YES];
      }

答案 1 :(得分:0)

我不确定我完全理解您的意思,但为什么不在NSString中创建包含所需值的SecondViewController。这样,当您设置SecondViewController

时,您可以执行类似的操作
SecondViewController *nextView = [[SecondViewController alloc] init];
nextView.myNSString = @"Value you need in the next view";

然后在SecondViewController.h中,您将能够像这样访问NSString:

@NSLog(@"%@", self.myNSString);

答案 2 :(得分:0)

您缺少的主要内容是视图之间传递的值。您没有在任何将值传递给另一个视图的视图中使用任何对象。比如,如果要将文本从FirstViewController传递给SecondViewController。你可以像下面这样做。

NSString *textToPass = self.firstField.text;

在你的SecondViewController中,需要一个字符串对象,如passText。在firstViewController中创建secondViewController的对象时,请按以下步骤操作:

SecondViewController *controllerSecond = [[SecondViewController alloc]  initWithNibName:@"SecondViewController" bundle:nil];
controllerSecond.passedText = textToPass;
[self.navigationController pushViewController:controllerSecond animated:YES];

现在无论您想要显示第一个屏幕的文本,只需使用“passtext”字符串。

希望它有所帮助。  :)

===============================================

在您的代码中,您可以尝试以下修改:

NSString *selectedRow = [tableData objectAtIndex:indexPath.row];
            controller = (FirstViewController *)[self.navigationController topViewController];
            controller.selectedRow = selectedRow;
            [self.navigationController popViewControllerAnimated:YES];

它将解决您的问题。

答案 3 :(得分:0)

您需要使用的是委托。它是Object-C中非常常用的模式。看看我对SO post的回答。如果你还需要代码,请告诉我。