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

Objective-C

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

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

21.09.2014, 15:24. Просмотров 1145. Ответов 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 минут
Вопросы сняты - все получилось. Передавал в качестве объектов сами контролы. Потом, зная их тип - вытаскивал значения
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2014, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача данных из одного View Controller в другой посредством делегатов (Objective-C):

Вызвать метод View Controller'a из другого View Controller'a - Objective-C
Какой есть простой способ вызвать метод одного контроллера из другого ? Метод - остановка обновления координат, если что. -...

Смена Root View Controller в Navigation Controller - Программирование iOS
Доброго времени суток. В приложении есть Storyboard. В нем navigation controller выставлен как initial view controller. При первом...

По нажатию кнопки на View Controllere открыть Table View Controller - Программирование iOS
Как по нажатию кнопки на View Controllere открыть Table View Controller

Вместо navigation bar с table view хочу сделать просто view controller - Программирование iOS
добрый вечер. В xcode есть стандартный темплейт с navigation controller, но там по дефолту table view controller (master controller)...

Передача данных между view - Программирование iOS
Здравствуйте! подскажите пожалуйста, у меня такая проблема. Есть несколько view контроллеров(несколько экранов) У меня приходят данные из...

Жесты + View Controller - Objective-C
Доброго времени суток Облазил кучу топиков стэк оферфлоу, но так и не нашел четкого, доступного ответа на свой вопрос. Собственно сабж:...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2014, 15:24
Привет! Вот еще темы с ответами:

View Controller Scene - Программирование iOS
Еще раз всем Доброго времени суток.Вопрос у меня есть один View Controller Scene (на нем кнопка) я кидаю второй View Controller Scene как...

Работа с view controller в xcode 6 - Программирование iOS
Понимаю что вопрос наиглупейший, но всё же он есть, и мне не найти ответ. Собственно, есть view controller главной страницы, с...

Заполнение Table View Controller - Программирование iOS
Доброе время суток. По нажатию кнопки осуществляется переход с View Controller на Table View Controller. Как мне заполнить строки этого...

Table View Controller не видно ячеек - Программирование iOS
Здравствуйте. Я новичек и решил начать с чтения данной ссылки...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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