0

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

这是我目前拥有的

FirstUIViewController.h

#import <UIKit/UIKit.h>

@interface FirstUIViewController

IBAction Button1:(id)sender;
@end

第一UIViewController.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.
}

第二个UIViewController.h

#import <UIKit/UIKit.h>

@interface SecondUIViewController {
IBOutlet UILabel *label;
}

@end

第二个UIViewController.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.
}
4

3 回答 3

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已正确设置其委托的对象的消息。

于 2013-11-05T12:59:47.173 回答
0

如果您不使用情节提要,您只需创建第二个屏幕的实例,然后您可以参考 secondviewcontroller 属性。

在第一个屏幕的 .h 文件上:创建 secondviewpage 的实例

@property (nonatomic,retain)SecondViewController *detailcontroller;

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

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

self.detailcontroller.label

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

现在您无法通过点符号从第一个视图访问“SecondViewController”

希望我帮助了你。

伊丹

于 2013-11-05T13:00:11.333 回答
0

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

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

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

在视图控制器中viewDidLoad设置它 self.appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

appDelegate然后只需在视图控制器中获取或设置字符串值

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

于 2013-11-05T15:26:59.087 回答