Как использовать методы делегата для передачи объектов между двумя контроллерами представления? - PullRequest
0 голосов
/ 24 декабря 2011

Я использую проект Utility Application для Xcode 4.2, затем добавляю два текстовых поля для каждого представления: main view и flipside view.Теперь я хочу присвоить значение текстового поля flipside текстовому полю основного вида.

MainViewController.h

      #import "FlipsideViewController.h"

      @interface MainViewController : UIViewController <FlipsideViewControllerDelegate>  {
        UITextField *nameField;
      }
      @property(nonatomic, retain) IBOutlet UITextField *nameField;

      - (IBAction)showInfo:(id)sender;

      @end

FlipsideViewController.h

      @class FlipsideViewController;

      @protocol FlipsideViewControllerDelegate
         - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller;
      @end

      @interface FlipsideViewController : UIViewController {
          UITextField *changeText;
      }
      @property (nonatomic, retain) IBOutlet UITextField *changeText;
      @property (assign, nonatomic) IBOutlet id <FlipsideViewControllerDelegate> delegate;

      - (IBAction)done:(id)sender;

      @end

FlipsideViewController.m

      #import "FlipsideViewController.h"

      @implementation FlipsideViewController

      @synthesize delegate = _delegate;
      @synthesize changeText;

      - (IBAction)done:(id)sender
      { 
        [self.delegate flipsideViewControllerDidFinish:self];
      }

Когда начнется выполненное действие, я хочу, чтобы значение changetext было присвоено nameField тексту.Как мне это сделать?

1 Ответ

2 голосов
/ 24 декабря 2011

В MainViewController.m , реализуйте метод flipSideViewControllerDelegate следующим образом:

 - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller
{
self.nameField.text=controller.changeText.text;
}

Поэтому, когда вызывается метод done:, этот метод делегата также вызывается с вашим flipSideViewController объект в качестве аргумента, через который можно получить доступ к changeText.

РЕДАКТИРОВАТЬ, чтобы ответить на вопрос в комментарии:

В протоколе FlipSideViewControllerDelegate добавьте этот метод:

 - (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath

Тогда это похоже на реализацию другого метода делегата в MainViewController.m , как на самом деле работает протокол.Если ваш MainViewController соответствует протоколу, он может реализовать методы этого протокола.По умолчанию все методы, объявленные в протоколе, являются необязательными, но у вас есть возможность указать, является ли метод необязательным или обязательным, с помощью

@optional
//list of methods
@required
//list of methods

Имейте в виду, что если ваш метод объявлен как требуется впротокол, любой класс, соответствующий этому протоколу , должен его реализовать.В любом случае, в вашем MainViewController.m :

- (void)flipsideViewControllerDidSelect:(NSIndexPath*)indexPath
{
int anInt=indexPath.row;
self.nameField.text=[NSString stringWithFormat:@"%d",anInt];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...