Ios Передача TextView от PushView до PresentationView

Я пытаюсь сделать следующее и не в состоянии найти прямой ответ. Это связано с этим: Передача uitextfield из одного представления в другое. Но не совсем.

У меня есть Firstview.m, из которого я нажимаю Secondview.m. У Secondview.m есть UITextView. Я разрешаю пользователю редактировать UITextView на Secondview.m. Теперь я хочу сохранить это текстовое значение в переменной в Firstview.m. Один из способов сделать это:

в Firstview.h

@property (nonatomic) Secondview *secondView;

Это сохранение переменной secondView в Firstview. Но это не кажется эффективным. В идеале у меня должно быть только 1 текстовое поле NSString в FirstView. Каков правильный способ сделать это? благодаря

1 ответ

Вы можете добиться этого, используя делегирование в Objective-C.

В SecondView.h добавьте следующее сразу после включения заголовка

@protocol YourDelegateName <nsobject>
 -(void)setText:(NSString *)strData;
@end
</nsobject>

Также добавьте свойство delegate в свой заголовок для доступа к ним в вызывающем классе, например, ниже (это относится к объявлению других свойств в файле SecondView.h):

@property (nonatomic, weak) id<yourdelegatename> delegate;
</yourdelegatename>

Теперь придет участие в делегатской части. Скажем, вы хотите сохранить текстовое значение UITextView из SeconView в strTextViewData из FirstView класса, когда происходит следующее событие:

- (********)save:(id)sender
{
 [self.delegate setText:self.txtView.text]; // Assuming txtView is name for UITextView object
}

Теперь, в FirstView.h добавьте YourDelegateName в список делегатов, как YourDelegateName ниже:

@interface FisrtView : ViewController <yourdelegatename>
 @property (nonatomic, reatin) NSString *strTextViewData;
@end
</yourdelegatename>

А потом в FisrtView.m файл при создании экземпляра SecondView класса, установить делегат self, как показано ниже:

SecondView *obj = [[SecondView alloc] initWithNibName:@"SeconView" bundle:nil];
obj.delegate = self; // THIS IS THE IMPORTANT PART. DON'T MISS THIS.

Теперь выполните метод делегата:

-(void)setText:(NSString *)strData
{
 self.strTextViewData = strData;
}

Применение этого кода будет делать то, что вы хотите. Кроме того, Делегирование является одной из важнейших особенностей языка Objective-C, которая - делая это - вы узнаете.

Дайте мне знать, если у вас возникнут какие-либо проблемы с этой реализацией.

licensed under cc by-sa 3.0 with attribution.