如何从另一个UIViewController更改UIViewController的UILabel

时间:2013-11-05 12:41:17

标签: ios objective-c uiviewcontroller uilabel

我有一个名为FirstUIViewController和SecondUIViewController的两个UIViewController,当我从FirstUIviewController按下按钮时,我想从FirstUIViewController更改SecondtUIViewController上UILabel的文本。我不知道该怎么做我不熟悉objective-c和ios开发。

这是我目前拥有的

FirstUIViewController.h

#import <UIKit/UIKit.h>

@interface FirstUIViewController

IBAction Button1:(id)sender;
@end

FirstUIViewController.m

#import "MainViewController.h"

@implementation FirstUIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewdidload {
//some codes here.
}

SecondUIViewController.h

#import <UIKit/UIKit.h>

@interface SecondUIViewController {
IBOutlet UILabel *label;
}

@end

SecondUIViewController.m

#import "SecondUIViewController.h"

@implementation FirstUIViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewdidload {
//some codes here.
}

3 个答案:

答案 0 :(得分:0)

您需要为您的班级声明委托协议。类Foo的委托协议和接口的示例可能如下所示:

@class Foo;
@protocol FooDelegate <NSObject>
@optional
- (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag;
- (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag;
@end

@interface Foo : NSObject {
     NSString *bar;
     id <FooDelegate> delegate;
}

@property (nonatomic, retain) NSString *bar;
@property (nonatomic, assign) id <FooDelegate> delegate;

- (void)changeLabelText;

@end

不要忘记在@implementation中合成您的属性。

最后一步是在符合Foo的类中实例化FooDelegate对象,并为此Foo对象设置其委托属性:

Foo *obj = [[Foo alloc] init];
[obj setDelegate:self];

现在,您的班级已准备好接收来自Foo个对象的消息,这些对象的代理设置正确。

答案 1 :(得分:0)

如果你没有使用storyboard,你只需要创建第二个屏幕的实例,然后你可以参考secondviewcontroller属性。

在第一个屏幕的.h文件中: 创建第二个视图的实例

@property (nonatomic,retain)SecondViewController *detailcontroller;

在第一个视图的.m文件中(当您要加载页面时)。

self.detailcontroller = [[SecondViewController alloc]initWithNibName:@"SecondViewController" bundle:nil];

self.detailcontroller.label

// str作为secondViewController中的一些nsstring变量

现在你无法通过点符号

从第一个视图访问“SecondViewController” 希望我能帮助你。

IDAN

答案 2 :(得分:0)

简单的方法是将属性存储在AppDelegate中并设置/获取它。

AppDelegate.h @property (nonatomic, strong) NSString *transferString;AppDelegate.m @synthesize transferString

在您的第一个和第二个v iewcontrollers.m导入"AppDelegate.h"中 为它创建一个属性@property (nonatomic, strong) AppDelegate *appDelegate;

在viewcontrollers viewDidLoad中设置self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

然后只需在viewcontrollers中的appDelegate中获取或设置字符串值

设置它:self.appDelegate.transferString = aString; 得到它:NSString *theString = self.appDelegate.transferString;