我有两个观点。 第一:FirstViewController 第二:SecondViewController
FirstViewController 是我的 UINavigationController 的根控制器,在 FirstViewController 里面我有UITableView。在UITableView中单击单元格时,视图将导航到 SecondViewController 。在 SecondViewController 里面我有UILabel。我想将此UILabel的值分配给在导航栏中单击“返回”按钮 时在FirstViewController 中单击的单元格。我该怎么办才能实现这个目标?
我可以通过创建:
从FirstViewController传递值到SecondViewControllerSecondViewController * sv; sv.somestring = someanotherstring;
但无法在SecondViewController上实现此功能,以便将值传递给FirstViewController中的NSString。
你可以帮帮我吗?谢谢。 AE
答案 0 :(得分:7)
在iPhone SDK中处理此问题的典型方法是定义委托协议。例如:
@protocol SecondViewControllerDelegate
- (void) viewControllerWillDisappearWithLabelText: (NSString*)text;
@end
然后,您可以向delegate
添加SecondViewController
属性,例如:
//in the .h file
@interface SecondViewController : UIViewController {
//declare instance variables
}
@property(nonatomic, assign) id<SecondViewControllerDelegate> delegate;
@end
//in the .m file
@implementation SecondViewController
@synthesize delegate;
//[code...]
@end
然后,您将更新FirstViewController
以实现委托协议:
//in the .h file
@interface FirstViewController : UIViewController<SecondViewControllerDelegate> {
//[instance variables]
}
//[methods and properties]
@end
//in the .m file
@implementation FirstViewController
//[code...]
- (void) viewControllerWillDisappearWithLabelText: (NSString*)text {
//do whatever you need to do with the text
}
//[code...]
@end
...并在FirstViewController
创建SecondViewController
:
SecondViewController* sv = [[SecondViewController alloc] init];
sv.somestring = someanotherstring;
sv.delegate = self;
最后,在SecondViewController
中,您实施viewWillDisappear
大致如下:
- (void) viewWillDisappear: (bool)animated {
[super viewWillDisappear:animated];
if (self.delegate) {
[self.delegate viewControllerWillDisappearWithLabelText: myLabel.text];
}
}
答案 1 :(得分:0)
在appdeleage中声明一个字符串(stringVal)并将其属性设置为非原子并保留,合成它。在第二个视图控制器中,您可以将标签值设置为appdelegate字符串([appdelegate setStringVal:label.text];您可以在第一个视图控制器中获取此值并在表中使用它(NSString * localString = appdelegate.stringVal];)。
一切顺利。
答案 2 :(得分:0)
雅,有一个简单的方法可以解决这个问题.....
您可以采用全局变量
在 Delegate.h 文件中声明您的变量:
@interface Smoke_ApplicationAppDelegate : NSObject {
UIWindow *window;
UINavigationController *navigationController;
NSString *messageString; //This would be your String Variable
}
@property(nonatomic,retain)NSString *messageString;
其次在 Delegate.m 文件
中@implementation Smoke_ApplicationAppDelegate
@synthesize window;
@synthesize navigationController;
@synthesize messageString; // Synthesize it over here..
这是完成。现在你可以在你想要的所有/任何类中使用这个字符串变量..
使用此全局变量。
只需 导入您的委托文件,使其成为obj ....
import "DelegateFile.h"
@implementation About
DelegateFile *appDel;
现在在你的class.m
-(void)viewDidLoad { [super viewDidLoad];
appDel=[[UIApplication sharedApplication]delegate];
}
现在,您可以通过此对象访问类中的任何位置:
appDel.messageString
请仔细按照我的步骤,我相信这肯定会帮助你......
过上轻松的生活,