Передача данных из представления в просмотр? - PullRequest
0 голосов
/ 20 марта 2012

Я подаю заявку исключительно для более объективного изучения c.Это приложение в основном переводит пользователя в модальное представление, а затем предоставляет пользователю опции (uibuttons) для нажатия.Когда пользователь нажимает кнопку, модальное представление отклоняется, и я хотел бы взять данные, взятые с этой кнопки (будь то название кнопки, тег и т. Д., В зависимости от того, что проще всего использовать), и сохранить их как переменную вмой главный вид.Я пытался использовать extern NSString, определенный в отдельном файле .h, но не повезло.Что мне не хватает?

Ответы [ 5 ]

1 голос
/ 20 марта 2012

использовать делегирования. составить протокол.

@protocol SelectValueDelegate <NSObject>
@optional
- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller;
- (void)selectionCanceled:(UIViewController *)controller;
@end

внедрите его в свой MainViewController.h

@interface MainViewController : UIViewController<SelectValueDelegate> {
    //.... 
}
Файл

и .m выглядит следующим образом:

- (void) selectedValue:(NSString * )values selectionViewController:(UIViewController *)controller
{
    //here you have value.
    [controller dissmissModalViewControllerAnimated:YES];
}
- (void)selectionCanceled:(UIViewController *)controller
{
        [controller dissmissModalViewControllerAnimated:YES];
}

и в вас ModalViewController сделать свойство делегата следующим образом:

@interface ModalViewController : UIViewController
        id<SelectValueDelegate> delegate;
}
@property(assign)id delegate; // synthesize it also

теперь по нажатию кнопки сделайте что-то вроде этого:

-(IBAction)buttonClicked:(id)sender
{
       [delegate selectedValue:@"Value" selectionViewController:self];
}

и при модальном представлении внутри MainViewController сделать что-то вроде этого:

ModalViewController *screen = [[ModalViewController alloc] initWithBlahblah];
screen.delegate = self;
[self.navigationController presentModalViewControllerAnimated:YES];
0 голосов
/ 20 марта 2012

Предположим, у вас есть два контроллера представления, скажем A & B

Ваш Ах

{
  NSString *strData;
  int cId;
}

@property (nonatomic, retain) NSString *strData;
@property (readwrite) int cId;

Сейчас в вашем Am

@synthesize strData,cId;

Ваш Bh

@class A

{
   A *aObj;
}

Теперь в вашем Bm

#import "A.h"

- (void) viewDidLoad
{
  aObj=[A alloc] init]; //alloc object of A
  [aObj setCId:10]; //set value for cId
  [aObj setStrData:@"Hello from B"]; //set value for strData
  //do what ever
  [aObj release]; //don't forget
}
0 голосов
/ 20 марта 2012

Вы можете сохранить данные в объекте в appDelegate, который является файлом делегата для приложений,

Вы можете объявить объект в appDelegate:

NSString *buttonName;

Затем обработать и синтезироватьэтот объект.

После этого поместите код в View Controller, который вы открываете как модальное представление:

appDelegate.buttonName = yourbutton.titleLabel.text;

Теперь даже после отклонения модального представления вы будетесохраняя заголовок кнопки в объекте appldelegate, и вы можете получить к нему доступ из любого места в вашем приложении.

0 голосов
/ 20 марта 2012

вы должны использовать методы делегата для передачи значения, см. Документацию Apple

0 голосов
/ 20 марта 2012

Вы должны пройти через шаблон делегата в iOS.

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

Документация Apple по протоколам.

Пример использования протокола

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...