У меня возникла проблема, связанная с делегированием. У меня есть 2 tabView. В первом tabview у меня есть 2 текстовое поле и кнопка (для запуска метода делегата), а во втором tabview у меня есть 2 ярлыка, чтобы отображать содержимое текстового поля в первом tabview.Whats неправильно с моим кодом ???Пользовательское делегирование для передачи данных между представлениями панели вкладок в iOS не работает
Для первого tabviewA заголовочного файл
#import <UIKit/UIKit.h>
@class ViewControllerA;
@protocol ViewControllerADelegate <NSObject>
-(void)sayHello:(ViewControllerA*)viewController;
@end
@interface ViewControllerA : UIViewController<UITextFieldDelegate>
@property (nonatomic,strong)IBOutlet UITextField *textFieldFirst;
@property (nonatomic,strong)IBOutlet UITextField *textFieldSecond;
@property (nonatomic,strong)id<ViewControllerADelegate>delegate;
-(IBAction)next:(id)sender;
@end
и файл .m
#import "ViewControllerA.h"
@interface ViewControllerA()
@end
@implementation ViewControllerA
@synthesize textFieldFirst=_textFieldFirst;
@synthesize textFieldSecond=_textFieldSecond;
@synthesize delegate=_delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
_textFieldFirst.delegate=self;
_textFieldSecond.delegate=self;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return NO;
}
-(IBAction)next:(id)sender
{
[self.delegate sayHello:self];
}
@end
А для второго tabbarViewB заголовочного файл
#import <UIKit/UIKit.h>
#import "ViewControllerA.h"
@interface ViewControllerB : UIViewController<ViewControllerADelegate>
@property (nonatomic,strong)IBOutlet UILabel *labelFirst;
@property (nonatomic,strong)IBOutlet UILabel *labelSecond;
@end
и .m файл
#import "ViewControllerB.h"
@interface ViewControllerB()
@end
@implementation ViewControllerB
@synthesize labelFirst=_labelFirst;
@synthesize labelSecond=_labelSecond;
- (void)viewDidLoad
{
[super viewDidLoad];
ViewControllerA *viewControllerA=[self.tabBarController.viewControllers objectAtIndex:0];
viewControllerA.delegate=self;
// Do any additional setup after loading the view.
}
-(void)sayHello:(ViewControllerA *)viewController
{
_labelFirst.text=viewController.textFieldFirst.text;
_labelSecond.text=viewController.textFieldSecond.text;
}
@end
N.B: Я попробовал tabView B для табуляции A с тем же процессом и работал нормально. Обратное (от A до B) вообще не работает. Спасибо
В чем именно проблема, с которой вы столкнулись, и вы проверили, что «sayHello» вызывается в ViewControllerB, а текстовые значения не ноль? – d4Rk
В какой момент это «не работает»? Вы поставили точки останова в коде и убедитесь, что следующее: IBACtion вызывается, и если да, правильно ли установлен делегат и т. Д.? –
Если ViewControllerA является первым, что нужно отобразить, имеет ли ViewControllerB возможность установить себя в качестве делегата? –