我有一个名为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.
}
答案 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;