Передайте значение в текстовое поле первого вида - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть два представления с контроллером навигации: первое представление, есть пустые текстовые поля, а второе представление - это табличное представление, где пользователь может выбрать строку. При прикосновении к строке происходит действие, которое устанавливает значение в текстовое поле первого представления. К сожалению, когда я возвращаюсь к первому виду поля не установлено.

Это мой код:

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 ]

1 голос
/ 23 декабря 2011

Исходя из кода выше, вы никогда не устанавливаете соединение в 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];
      }
0 голосов
/ 23 декабря 2011

Вам нужно использовать делегат. Это очень часто используемый шаблон в Object-C. Проверьте мой ответ на этот ТАК . Дайте мне знать, если вам все еще нужен код после.

0 голосов
/ 23 декабря 2011

Главное, что вам не хватает - это значение, передаваемое между представлениями. Вы не используете какой-либо объект в любом представлении, которое передает значение другому представлению. Например, если вы хотите передать текст из FirstViewController в SecondViewController. Вы можете сделать это следующим образом.

NSString *textToPass = self.firstField.text;

В вашем SecondViewController должен присутствовать строковый объект, скажем, с кодами «паст. Когда вы создаете объект secondViewController в firstViewController, выполните следующие действия:

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

Теперь Везде, где вы хотите показать текст первого экрана, просто используйте строку «пройденный текст».

Надеюсь, это поможет. :)

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

В своем коде вы можете попробовать следующую модификацию:

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

Это решит вашу проблему наверняка.

0 голосов
/ 23 декабря 2011

Я не уверен, что полностью понимаю, что вы имеете в виду, но почему бы вам не создать NSString, содержащий нужное вам значение в SecondViewController.Таким образом, вы можете сделать что-то вроде этого, настроив SecondViewController.

SecondViewController *nextView = [[SecondViewController alloc] init];
nextView.myNSString = @"Value you need in the next view";

. Затем в SecondViewController.h вы сможете получить доступ к строке NSS следующим образом:

@NSLog(@"%@", self.myNSString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...