【发布时间】:2015-03-06 07:50:48
【问题描述】:
我创建了简单的 ipad 应用程序,我想将值从 MainViewController 发送到 ContainerViewController。我对这个应用程序的整个目标是将值从 Container(A) 发送到 MainViewController,然后将 MainViewController 发送到 Container(B)。我能够将值从 Container(A) 发送到 MainViewController,但我无法将数据从 MainViewController 发送到 Container(B)。我认为我对 prepareForSegue 的使用是错误的。 ?我添加了图片来描述我的情况。
提前致谢。
A_ContainerViewController.h
@class A_ContainerVC;
@protocol A_ContainerVCDelegate <NSObject>
-(void)sendValue:(NSString *)Name;
@end
@interface A_ContainerViewController : UIViewController
@property(nonatomic,assign) id <A_ContainerVCDelegate> delegate
- (IBAction)btnSend:(id)sender;
@end
A_ContainerViewController.m
- (IBAction)btnSend:(id)sender {
NSString *text=@"Tutorial";
[self.delegate sendValue:text];
}
ViewController.h
#import <UIKit/UIKit.h>
#import "A_ContainerViewController.h"
@class MainVC;
@protocol MainVCDelegate <NSObject>
-(void)sendValue2:(NSString *)Name;
@end
@interface ViewController : UIViewController
@property(nonatomic,assign) id <MainVCDelegate> delegate;
@property (strong, nonatomic) IBOutlet UILabel *lblVC;
@end
ViewController.m
@interface ViewController () <A_ContainerVCDelegate>
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"A"]) {
[(A_ContainerViewController *)segue.destinationViewController setDelegate:self];
}
}
-(void)sendValue:(NSString *)Name{
lblVC.text = Name;
[self.delegate sendValue2:Name];
}
B_ContainerViewController.h
#import <UIKit/UIKit.h>
#import "ViewController.h"
#import "A_ContainerViewController.h"
@interface B_ContainerViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *lbl_B_VC;
@end
B_ContainerViewController.m
@interface B_ContainerViewController ()<MainVCDelegate>
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"B"]) {
[(ViewController *)segue.destinationViewController setDelegate:self];
/*
LayersViewController *layersViewController = (LayersViewController*)segue.destinationViewController;
layersViewController.name=@"Deneme";
*/
}
}
-(void)sendValue2:(NSString *)Name{
lbl_B_VC.text=Name;
}
【问题讨论】:
-
你检查delegate是否不为零吗?我假设您在单击控制器 A 上的按钮时调用委托方法,同时控制器 B 的委托设置在尚未执行的 -prepareForSegue 方法上。
-
首先我认为你应该改变你的语法。
-
@kayzersoze 我为什么要改变我的语法。我不明白
-
@fozoglu 这只是一个建议,如果你的语法清晰,你的代码更容易修复。
标签: ios objective-c segue uicontainerview