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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Подсчитать количество выбранных ячеек http://www.cyberforum.ru/objective-c/thread1258354.html
Доброго времени всем, столкнулся с такой проблемой, мне нужно узнать сколько ячеек сейчас у меня выбраные, когда отжимаю их, тоесть едит мод таблицы, выбрано несколько ячеек и когда я одну из них...
Objective-C Цвет точки на ImageView по координатам Доброго времени суток. Подскажите, как получить цвет точки на определенном ImageView по координатам? Есть один нюанс: у меня два ImageView разных размеров накладываются друг на друга. Мне нужно... http://www.cyberforum.ru/objective-c/thread1256047.html
Objective-C Отличия С++ от objC
Я неплохо знаю С++, закончил пару книг, а также начинал изучать С#, но в один момент, моя жизнь перевернулась и я должен выучить ObjC. Будут-ли у меня сложности с изучением этого языка, то есть...
Objective-C Хранение объектов в массиве
Добрый вечер! Стоит задача: создать матрицу с задаваемыми размерами строки и столбца и провести над ней операцию. При выполнении задания возникли 2 непреодолимые задачи. Гугл перерыл (включая на...
Objective-C Неизвестный объект занимает всю область ячейки UITableViewCell http://www.cyberforum.ru/objective-c/thread1254823.html
Есть класс наследованный от UITableViewController в методе tableView:cellForRowAtIndexPath я получаю ячейку: cell = ;потом создаю картинку (UIImageView) и текст (UILabel) и вставляю их в ячейку с...
Objective-C Обработка пуша Всм доброго времени суток, вот возникла проблемма, не могу найти рабочее решение, картина такая, мне сервер присылает пуш с определенным типом, я проверяю тип пуша и по нему через локальную... подробнее

Показать сообщение отдельно
kostasoft
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 15

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

21.09.2014, 15:24. Просмотров 1146. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru