Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
kostasoft
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 14
#1

Передача данных из одного View Controller в другой посредством делегатов - Objective-C

21.09.2014, 15:24. Просмотров 1011. Ответов 0
Метки нет (Все метки)

Бьюсь вторую неделю.
Имеется два View Controller-а, которые переключаются через Tab Bar Controller. В одном View Controller-e выполняется основная работа, во втором - настройки программы.
Необходимо передать измененные пользователем настройки из второго View Controller-a первому.
Создал новые файлы:

KTsendData.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import <Foundation/Foundation.h>
 
@protocol KTsendDataDelegate <NSObject>
@required
- (void)setPort:(int)data;
- (void)setStepZ:(int)data;
- (void)setSenceX:(int)data;
- (void)setSenceY:(int)data;
@end
 
@interface KTsendData : NSObject {
    id <KTsendDataDelegate> delegate;
}
@property (retain)id <KTsendDataDelegate> delegate;
@end
KTsendData.m
Objective-C
1
2
3
4
5
6
7
#import "KTsendData.h"
 
@implementation KTsendData
 
@synthesize delegate;
 
@end
Затем унаследовал этот протокол первым View Controller-ом (с основной работой)

KTFirstViewController.h
Objective-C
1
2
3
...
@interface KTFirstViewController : UIViewController <KTsendDataDelegate>
...
и реализовал методы, описанные в протоколе:

KTFirstViewController.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@implementation KTFirstViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    KTsendData *myProtocol = [[KTsendData new] init];
    myProtocol.delegate = self;
}
-(void)setPort:(int)data {
    port = data;
}
-(void)setSenceX:(int)data {
    senceX = (float)data;
}
-(void)setSenceY:(int)data {
    senceY = (float)data;
}
-(void)setStepZ:(int)data {
    stepZ = (float)data / 500.0;
}
Правильно ли я все сделал?
Если да, то как получить доступ ко всему этому из второго View Controller-a?

Добавлено через 20 часов 56 минут
Господа, почитал немного про KVO. Может в моем случае использовать KVO будет проще?
Во втором контролере есть элементы интерфейса, которые выделены в коде как свойства и засинтезированы:
Objective-C
1
2
3
4
@property (weak, nonatomic) IBOutlet UITextField *udpporttxt;
@property (weak, nonatomic) IBOutlet UISlider *speedZslider;
@property (weak, nonatomic) IBOutlet UISlider *senceXslider;
@property (weak, nonatomic) IBOutlet UISlider *senceYslider;
Может поставить на них наблюдателя из первого View Controller-a?
Вопроса три:
1. Нужно ли менять для них дополнительные параметры (atomic/nonatomic, copy/weak/strong, readwrite/readonly)?
2. Что лучше использовать в первом ViewControllere - notification или KVO?
Изменять значения из первого контролера я не буду, только нужно оперативно получать данные.
3. Правильно ли я понимаю, что во втором контролере (наблюдаемый) в методах, отслеживающих изменения значения этих контролов нужно добавить по строчке вида:
Objective-C
1
[[NSNotificationCenter defaultCenter] postNotificationName:nameNotification object:self];
, а в первом контроле (наблюдающем) в методе - (void)viewDidLoad необходимо запустить наблюдателя на каждое property, вида:
Objective-C
1
[[NSNotificationCenter defaultCenter] addObserver:object selector:@selector(observeNotification:) name:nameNotification object:nil];
, указав для каждого сообщения свой метод обработки?

Добавлено через 33 минуты
Ура, нотификация сработала, повесил в методе изменения значения каждого контрола вызов
Objective-C
1
[[NSNotificationCenter defaultCenter] postNotificationName:@"namenotif1" object:nil];
и в первом контроле повесил слушателя на каждое имя события со своим методом обработки.

Осталось понять, как передать значение переменной типа int в качестве объекта.

Добавлено через 1 час 36 минут
Вопросы сняты - все получилось. Передавал в качестве объектов сами контролы. Потом, зная их тип - вытаскивал значения
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2014, 15:24     Передача данных из одного View Controller в другой посредством делегатов
Посмотрите здесь:

Objective-C Проблема с Navigation Controller
Objective-C Перелистывание View
push notification переход на нужный view controller Objective-C
Objective-C Жесты + View Controller
Objective-C Передача инициализированных переменных из одного класса в другой (objective c, XCODE 5.0.2)
Действие по переходу на другую страницу Tab Controller`a Objective-C
Objective-C Передача информации из текстбоксов одного окна в таблицу другого окна
Передача данных segue Objective-C
Передача данных с клиента на сервер и обратно Objective-C
Вывод дроби посредством ООП Objective-C
Objective-C Передача данных между экранами
Вызвать метод View Controller'a из другого View Controller'a Objective-C

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru