Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает delegate 
:(
    Опции темы
JohnyBlackbird
Дата 19.3.2014, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Всем привет, у меня такая проблема, не получается написать делегат. По задумке есть 2 вью контроллера, в одном из них есть UItextBox, в который юзер вводит число с плавающей точкой, и кнопка. Число должно передаваться в другой вью контроллер по нажатию кнопки и выводиться там в UIabel. Но этого не происходит. Я тут выложил свой код, подскажите, что я неправильно делаю?
FirstViewController.h
Код

#import <UIKit/UIKit.h>
#import "DelegateProtocol.h"
@interface FirstViewController : UIViewController{
 IBOutlet UITextField *textfield1, *textfield2;
   __unsafe_unretained id <DelegateProtocol> _delegate;

}
@property (nonatomic, assign) id <DelegateProtocol> delegate;
- (IBAction) ButtonClick:(id) sender;
@end
;


FirstViewController.m
Код

#import "FirstViewController.h"

/*@interface FirstViewController ()

@end*/

@implementation FirstViewController
@synthesize delegate=_delegate;
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction) ButtonClick:(id) sender{
    float g = [textfield1.text floatValue];
    [self.delegate SendA:g];
    
}

@end



Код

#import <UIKit/UIKit.h>
#import "DelegateProtocol.h"
#import "FirstViewController.h"
@interface SecondViewController : UIViewController<DelegateProtocol> {
    float _a, _b;
    IBOutlet UILabel * Alabel, *Blabel;
}
@property float a, b;
@end


SecondViewController.m
Код

#import "SecondViewController.h"

/*@interface SecondViewController  ()

@end*/

@implementation SecondViewController
@synthesize a=_a;
- (void)viewDidLoad
{
    [super viewDidLoad];
    FirstViewController * testAppViewController = [[FirstViewController alloc] init];
    testAppViewController.delegate = self;
    // Do any additional setup after loading the view, typically from a nib.
}
-(void) SendA:(float) A{
    self.a = A ;
    NSString *str = [NSString stringWithFormat:@"%f", self.a];
    [Alabel  setText:str];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

PM MAIL   Вверх
Bitter
Дата 19.3.2014, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



а кто у вас первым то запускается?
PM MAIL ICQ Skype   Вверх
JohnyBlackbird
Дата 19.3.2014, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Цитата(Bitter @ 19.3.2014,  20:10)
а кто у вас первым то запускается?

FirstViewController. Я думал, это из названия ясно.
PM MAIL   Вверх
Maksys
Дата 19.3.2014, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Future Splasher
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 15.6.2005
Где: Екатеринбург

Репутация: нет
Всего: 17



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


--------------------
 С уважением, BiMaWa™©.
user posted image
user posted image
PM MAIL ICQ Skype GTalk   Вверх
JohnyBlackbird
Дата 19.3.2014, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Если вы про сам протокол, то вот он.
DelegateProtocol.h
Код

#import <Foundation/Foundation.h>

@protocol DelegateProtocol <NSObject>
- (void) SendA:(float)A;
@end


PM MAIL   Вверх
Bitter
Дата 19.3.2014, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



Цитата(JohnyBlackbird @  19.3.2014,  20:18 Найти цитируемый пост)
FirstViewController. Я думал, это из названия ясно.

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

Я вижу что вы создаете FirstViewController внутри SecondViewController. Это значит что первым запускается именно SecondViewController
PM MAIL ICQ Skype   Вверх
JohnyBlackbird
Дата 19.3.2014, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Цитата(Bitter @ 19.3.2014,  20:53)
Цитата(JohnyBlackbird @  19.3.2014,  20:18 Найти цитируемый пост)
FirstViewController. Я думал, это из названия ясно.

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

Я вижу что вы создаете FirstViewController внутри SecondViewController. Это значит что первым запускается именно SecondViewController

При запуске программы первым открывается окно, за которое отвечает FirstViewController. А FirstViewController внутри SecondViewController создаётся, чтобы потом объявить SecondViewController делегатом. Или я что-то не так делаю?
PM MAIL   Вверх
Bitter
Дата 19.3.2014, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



конечно не так, вы создаете еще один FirstViewController, новый

Добавлено через 2 минуты и 25 секунд
Еще вопрос - а где вы создаете SecondViewController ?
PM MAIL ICQ Skype   Вверх
JohnyBlackbird
Дата 19.3.2014, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Цитата(Bitter @ 19.3.2014,  21:04)
конечно не так, вы создаете еще один FirstViewController, новый

Добавлено @ 21:06
так а как нужно сделать?
Еще вопрос - а где вы создаете SecondViewController ?

Там через TabBar вьюшки переключаются. Есть TabBarViewController - родительский контроллер из которого вызываются оба дочерних.

Это сообщение отредактировал(а) JohnyBlackbird - 19.3.2014, 21:22
PM MAIL   Вверх
Bitter
Дата 19.3.2014, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 10
Всего: 27



ну тогда если вы хотите передавать данные из одного контроллера в другой, то вы должны переопределить класс таб бара, и в его viewDidLoad получить доступ к этим двум контроллерам. Получив доступ назначите одного в качестве делегата второго

Добавлено через 2 минуты и 21 секунду
либо второй вариант по проще - создать класс синглтон и передавать данные через него
есть еще вариант с NSNotification. В первом контроллере отправляете NSNotification, во втором контроллере его ловите. В нотификэйшене можете передать self в качестве userInfo и его потом использовать для установления делегата

Добавлено через 5 минут и 14 секунд
Ну и пожалуй самый правильный вариант (как я бы сделал):
- переопределить класс таб бара
- назначить в качестве делегата именно класс таб бара (то есть данные от первого контроллера будут приходить в таб бар)
- при получении данных таб бар передает данные второму контроллеру, вызывая какой-нибудь его метод
PM MAIL ICQ Skype   Вверх
tilanata
Дата 19.3.2014, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.3.2014

Репутация: нет
Всего: нет



А не пробовали что то из живого кода скачать и потом прикрутить по аналогии к себе? Вы же не так все делаете? Запускаете все гамузом и пытаетесь потом определиться:)) Я позно зашла, вам уже вижу рассказали:))
PM MAIL   Вверх
JohnyBlackbird
Дата 19.3.2014, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Цитата(Bitter @ 19.3.2014,  21:43)
ну тогда если вы хотите передавать данные из одного контроллера в другой, то вы должны переопределить класс таб бара, и в его viewDidLoad получить доступ к этим двум контроллерам. Получив доступ назначите одного в качестве делегата второго

Добавлено @ 21:46
либо второй вариант по проще - создать класс синглтон и передавать данные через него
есть еще вариант с NSNotification. В первом контроллере отправляете NSNotification, во втором контроллере его ловите. В нотификэйшене можете передать self в качестве userInfo и его потом использовать для установления делегата

Добавлено @ 21:49
Ну и пожалуй самый правильный вариант (как я бы сделал):
- переопределить класс таб бара
- назначить в качестве делегата именно класс таб бара (то есть данные от первого контроллера будут приходить в таб бар)
- при получении данных таб бар передает данные второму контроллеру, вызывая какой-нибудь его метод

а что вы имеете в виду под "переопределить класс таббара"? Создать свой класс, занаследовать его от UITabBarViewController и привязать его к моему таб бару?
PM MAIL   Вверх
JohnyBlackbird
  Дата 20.3.2014, 00:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 26.12.2009

Репутация: нет
Всего: нет



Всё, спасибо, всё получилось. Переопределил UITabBarController и использовал его в качестве буфера(сделал его делегатом).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | iOS | Следующая тема »


 




[ Время генерации скрипта: 0.0751 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.