0

我有一个带有两个视图控制器的应用程序,我想在 VC2 内部的 UITextView 中显示来自 VC1 中的 UILabel 的文本。

我已经能够在 VC2 的 viewDidLoad 中从 VC1 访问 UILabel,但实际文本没有出现。

在 VC2 中我创建了一个 VC1 对象并且可以访问 VC1。这是 VC2 viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.textView.text = vc1Controller.label.text;
}

但是当我运行应用程序并出现 VC2 时,UITextView 中什么也没有出现。我确实已经连接了它,并且可以通过执行 NSLog(@"Yes"); 来显示文本;例如在上述方法中。

当我做一个 NSLog(@”%@”, vc1Controller.label.text); 我在输出中得到 NULL。

我需要创建自定义吸气剂吗?任何建议表示赞赏。我对所有编程都比较陌生。

4

3 回答 3

1

在行中:

self.textView.text = [vc1Controller self.label.text];

您正在使用self关键字 in [vc1Controller self.label.text],但这将引用当前视图控制器(视图控制器 2)中不存在的 UILabel。将 vc1Controller 中的标签设为属性,然后使用:

vc1Controller.label.text;

访问其文本值。

于 2012-07-21T19:04:46.617 回答
1

这是从视图传递 NSString 的方式:

第一视角:

@interface ViewController : UIViewController{
IBOutlet UILabel *firstLbl;
NSString *firstString;
}

-(IBAction)labelTouched:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

firstString = @"I'm the first labels text";
firstLbl.text = firstString;

}


-(IBAction)labelTouched:(id)sender{

ViewController2 *view2 = [[ViewController2 alloc] init];
view2.selectedFirstLabelString = firstString;
[self presentModalViewController:view2 animated:YES];
[view2 release];
}

第二视图:

@interface ViewController2 : UIViewController{
IBOutlet UILabel *secondLbl;
}
@property (nonatomic, retain)NSString *selectedFirstLabelString;

-(IBAction)done:(id)sender;
@end



@implementation ViewController2
@synthesize selectedFirstLabelString;


- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

secondLbl.text = selectedFirstLabelString;
}

希望这可以帮助。

于 2012-07-22T00:21:20.167 回答
1

当你在 VC2 中创建一个 VC1 对象时,你显然不是指推送 VC2 的 VC1。

您的 vc2 正在尝试从新创建的 vc1 中读取标签值,而您实际上想从推送 VC2 的 VC1 中读取值。

有几种方法可以让您的代码正常工作:

1)访问 parentViewController(如果您将 vc2 呈现为模态)

在 VC2 中,你可以引用你的父控制器:

VC1* vc = (VC1 *)self.parentViewController; VC2.textView.text = vc.label.text;

2)从navigationcontroller堆栈访问vc1: 如何访问UINavigationController中的堆栈这篇文章有它的全部

3)使用委托模式。 自定义委托这一个拥有一切!

希望您觉得这个有帮助。

于 2012-07-22T02:50:12.190 回答