将参数从视图传递回另一个视图UITableViewCell

时间:2011-05-11 10:23:48

标签: iphone uitableview uinavigationcontroller

我有两个观点。 第一:FirstViewController 第二:SecondViewController

FirstViewController 是我的 UINavigationController 的根控制器,在 FirstViewController 里面我有UITableView。在UITableView中单击单元格时,视图将导航到 SecondViewController 。在 SecondViewController 里面我有UILabel。我想将此UILabel的值分配给在导航栏中单击“返回”按钮 时在FirstViewController 中单击的单元格。我该怎么办才能实现这个目标?

我可以通过创建:

从FirstViewController传递值到SecondViewController

SecondViewController * sv; sv.somestring = someanotherstring;

但无法在SecondViewController上实现此功能,以便将值传递给FirstViewController中的NSString。

你可以帮帮我吗?

谢谢。 AE

3 个答案:

答案 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

请仔细按照我的步骤,我相信这肯定会帮助你......

过上轻松的生活,