Возврат NSString из UIViewController - PullRequest
0 голосов
/ 04 ноября 2011

Я хочу вернуть NSString * из UIViewController, называемого InputUIViewController, в предыдущий UIViewController, называемый CallerUIViewController, который запускал InputUIViewController. Я хочу сделать это непосредственно перед или когда InputUIViewController вызывает:

[self dismissModelViewControllerAnimated:YES];

Есть ли стандартный способ сделать это?

Ответы [ 2 ]

10 голосов
/ 04 ноября 2011

Стандартный способ сделать это - использовать делегата.

В ваш InputViewController добавьте новый протокол делегата и свойство для вашего делегата.

Затем в вашем CallerUIViewController реализуйте делегат. Затем, непосредственно перед тем, как вы отклоните модальный контроллер вида, вы можете перезвонить своему делегату.

Так что ваш InputViewController может выглядеть так:

@protocol InputViewControllerDelegate;

@interface InputViewControllerDelegate : UIViewController {
}

@property (nonatomic, assign) id <InputViewControllerDelegate> delegate;

@end


@protocol InputViewControllerDelegate
- (void)didFinishWithInputView:(NSString *)stringValue;
@end

Метод, который отклоняет модальное представление, будет выглядеть примерно так:

-(void)dismissSelf
{
   [self.delegate didFinishWithInputView:@"MY STRING VALUE"];
   [self dismissModalViewControllerAnimated:YES];
}

Тогда в вашем CallerUIViewController вы реализуете InputViewControllerDelegate и метод didFinishWithInputView.

Заголовок CallerUIViewController будет выглядеть примерно так:

@interface CallerUIViewController : UIViewController <InputViewControllerDelegate> {
}

и ваш метод didFinishWithInputView будет реализован примерно так:

- (void)didFinishWithInputView:(NSString *)stringValue
{
    // This method will be called by the InputViewController just before it is dismissed
}

Непосредственно перед вашим подарком InputViewController вы должны установить делегата на себя.

-(void)showInputViewController
{
   InputViewController *inputVC = [[InputViewController alloc] init];
   inputVC.delegate = self;

   [self presentModalViewController:inputVC animated:YES];

   [inputVC release];
}
0 голосов
/ 04 ноября 2011

Вы можете сделать это, просто создав объект NSString как property в контроллере предварительного просмотра, а при втором просмотре вы вызываете dismissModelViewControllerAnimated, а затем перед присвоением значения предыдущему контроллеру представления property.Это может помочь вам -

Передача данных между классами с использованием Objective-C

...