使用协议传递数据TextView

时间:2013-12-13 12:41:39

标签: ios uiviewcontroller textview protocols

我有两个视图控制器......

ViewController 1有一个标签,应该显示通过TextView输入的文本。

ViewController 2有一个TextView,它将文本传递给ViewController 1的标签

为此,我以这种方式使用协议

头文件VC2.h

@protocol TransferTextViewDelegate <NSObject>
-(void)PassedData:(NSString *)text;

@end

@interface VC2 : UIViewController <UITextViewDelegate>

@property (nonatomic, weak)id <TransferTextViewDelegate> delegate;

@property (strong, nonatomic) IBOutlet UITextView *FFTextView;
@property (strong, nonatomic) NSString *title;

- (IBAction)sendTextViewcontent:(id)sender;

@end

在实施文件VC2.m

#import "VC2.h"
#import "VC1.h"

@interface VC2 ()

@end

@implementation VC2
@synthesize FFTextView;
@synthesize delegate;
@synthesize title;

- (void)viewDidLoad {
    [super viewDidLoad];
    [FFTextView becomeFirstResponder];
    FFTextView.delegate = self;
}

- (IBAction)sendTextViewcontent:(id)sender {

    if (delegate) {
        title = FFTextView.text;
        [delegate PassedData:title];
    }

    [self dismissViewControllerAnimated:YES completion:nil];

}

@end

在ViewController 1中,就像我说的,这是一个UILabel,它应该显示在ViewController 2的TextView中输入的文本

实施文件VC1.m

-(void)viewWillAppear:(BOOL)animated {
    TitoloAnnuncio.text = TitoloAnnuncioInserito;
}

-(void)PassedData:(NSString *)text {   
    TitoloAnnuncioInserito = text;
}

在头文件VC1.h中实现了这个属性:

@property (strong, nonatomic) IBOutlet UILabel *TitoloAnnuncio;
@property (strong, nonatomic) NSString *TitoloAnnuncioInserito;

我的问题是我无法理解为什么我的标签没有显示文本..它仍然是空的...我无法从ViewController 2中的ViewController传递数据 你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

不考虑使用初始小写字母命名变量的问题......

您正在委托方法中设置字符串值,但是,iOS不是OS X,没有绑定,因此只更改属性的值不会自动更改文本字段中显示的值。

您有几个选项,一个是在委托方法中更新显示。

- (void)PassedData:(NSString *)text {   
    TitoloAnnuncioInserito = text;
    TitoloAnnuncio.text = TitoloAnnuncioInserito;
}

另一种方法是在属性值发生变化时在标签中设置显示 - 这样更健壮。

- setTitoloAnnuncioInserito:(NSString *)string {
    _TitoloAnnuncioInserito = string;
    self.TitoloAnnuncio.text = string;
}

使用此功能,您可以将委托方法更改为:

- (void)PassedData:(NSString *)text {   
    self.TitoloAnnuncioInserito = text;
}