1

我不知道如何从不同View Controller的 .

我创建了一个新项目,希望能快速响应作为它的作业,并且必须在今晚之前完成。

在我的项目中,我有两个View Controller名字;viewcontroller1viewcontroller2,并将它们分配给两个不同的自定义类。

Viewcontroller1来到屏幕它有两个UIButtons,一个用于运行代码,另一个用于推送到viewcontroller2.

当用户单击第一个时UIButton,我希望该按钮运行下面的代码并将结果显示UILabel在我的viewcontroller2.

该代码使用创建随机数arc4random,然后在UILabel. 该代码适用于基于单页的应用程序,并在实现中使用。

所以基本上我想要的是,当我单击第一个时,UIButton我想UILabelviewcontroller2.

-(IBAction)button; {
    int random_num;
    random_num = (arc4random() % 5 - 1) + 1;
    if (random_num == 1) { 
    label.text = @"hello1";    
    } 
    else if (random_num == 2) {
    label.text = @"hello2";
    }
    else if (random_num == 3) {
    label.text = @"hello3";
    }
    else if (random_num == 4) {
    label.text = @"hello4";
    }
}

timelabelUILabel我的viewcontroller2

能否请您在回答中详细说明。我是初学者,可能无法立即掌握这些概念。

例子

用户打开应用

显示 Viewcontroller1

用户按下button 1其中运行代码labelviewcontroller2

用户按button 2下去viewcontroller

Viewcontroller2出现并且其上的标签已被按钮更改

我知道这不是一件难事,但我做不到。

对于那些之前回答过我的人和那些将回答我的人,非常感谢你..

谢谢。

4

2 回答 2

1

你可以使用协议

1)像这样在 viewcontroller1.h 中创建协议

@protocol ViewController1Delegate <NSObject>

- (void)dealWithButton1;

@end

2) 添加delegate.in viewcontroller1.h

@interface viewcontroller1 : XXXXX
{
    id<ViewController1Delegate> delegate;
}
@property(nonatomic,assign) id<ViewController1Delegate> delegate;

@end

3) 在 vi​​ewcontroller1.m 中添加了综合

@synthesize delegate;

4)处理按钮发送者

-(IBAction)button
{
    [delegate dealWithButton1];
}

5)处理viewcontroller2.h

@interface viewcontroller2 : XXXXX<ViewController1Delegate>
{
    viewcontroller1 *vc1 ;
}

6) 在 vi​​ewcontroller2.m 中绑定委托

vc1.delegate = self;

7)在viewcontroller2.m中实现委托

- (void)dealWithButton1
{
int random_num;
random_num = (arc4random() % 5 - 1) + 1;
if (random_num == 1)
{ 
    label.text = @"hello1";    
}
else if (random_num == 2)
    label.text = @"hello2";
else if (random_num == 3)
    label.text = @"hello3";
else if (random_num == 4)
    label.text = @"hello4";
}
于 2012-07-23T23:24:36.910 回答
0

所以,首先我要明确一点,viewcontroller1 不可能出现在屏幕上。实际上 viewcontroller1 的视图出现在屏幕上。您在屏幕上只看到视图,它们属于/由视图控制器控制。

要正确回答您的问题,我们需要知道,您使用什么来更改视图?你使用导航控制器、标签栏控制器还是其他东西?

标签通常是用于呈现文本的 UI 元素,在 viewcontroller 的 viewDidLoad 方法中初始化。因此,在此之前设置文本无济于事。

如果您从 viewcontroller1 引用了 viewcontroller2,您可以创建一个属性来保存文本并在按下按钮后设置它。viewcontroller2 可以在标签上加载视图后呈现文本。所以你在 viewcontroller1 中的代码看起来像这样

-(IBAction)button; {
 ViewController2 *viewController2 = [[ViewController2 alloc] init];
 viewcontroller2.textToShow = ......;
 //show view of your viewcontroller2
 // e.g.
 [self.navigationController pushViewController:viewcontroller2 animated:YES];
 }

还有你的 viewcontroller2 头文件(ViewController2.h)

   @property (nonatomic, strong) NSString *testToShow;

你 viewController2 的实现文件(Viewcontroller2.m)

@synthesize textToShow;
-(void)viewDidLoad
 {
     UILabel *label = UILabel aloc initWithFrame:CGRectMake(0, 0, 200, 200);
     [self.view addSubview:label];
     label.text = self.textToShow;
 }
于 2012-07-23T23:38:02.710 回答