Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
kostasoft
0 / 0 / 1
Регистрация: 22.10.2013
Сообщений: 15
#1

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

21.09.2014, 15:24. Просмотров 1261. Ответов 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
Какой есть простой способ вызвать метод одного контроллера из другого ? Метод...

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

По нажатию кнопки на View Controllere открыть Table View Controller
Как по нажатию кнопки на View Controllere открыть Table View Controller

Вместо navigation bar с table view хочу сделать просто view controller
добрый вечер. В xcode есть стандартный темплейт с navigation controller, ...

Передача данных между view
Здравствуйте! подскажите пожалуйста, у меня такая проблема. Есть несколько view...

View Controller Scene
Еще раз всем Доброго времени суток.Вопрос у меня есть один View Controller...

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

Жесты + View Controller
Доброго времени суток Облазил кучу топиков стэк оферфлоу, но так и не нашел...

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

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

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


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

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

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