如何将表输出传递给另一个视图控制器?

时间:2012-02-06 21:52:33

标签: ios uitableview

我意识到已经提出了类似的问题,但是花了好几个小时试图解决问题。我是新手。我敢打赌,这只是一个导入声明或变量声明。

我使用标签式FirstViewController来调用其上有TableView的SecondVieWController。表的输出被捕获在SecondViewController上的表下面的标签tableOutput中。 [它的工作原理。]我按下选项卡并返回FirstViewController。如何访问tableOutput值,例如,将其放入名为titleLabel的标签中?

我尝试了各种变体                titleLable.text = SecondViewController.tableOutput.text

但只是得到“在UIViewController类型的对象上找不到属性tableOutput”的错误消息。

我能够在iPad应用程序中使用弹出控制器来完成它,但是从使用iPhone选项卡式视图控制器开始实现类似的操作时遇到了麻烦。

我做错了什么?

感谢。

-Rob

2 个答案:

答案 0 :(得分:1)

您需要做的是获取对实际SecondViewController对象的引用。我能想到的最简单的方法是创建一个IBOutlet连接到SecondViewController对象,然后通过该成员访问标签。

在FirstViewController.h中:

#import "SecondViewController.h"

@interface 

    @property(nonatomic, retain) IBOutlet SecondViewController *secondView;

@end

在FirstViewController.m中:

@implementation FirstViewController

@synthesize secondView;

一旦声明了,请进入你的xib文件,并在FirstViewController和SecondViewController之间建立链接

然后您可以访问tableOutput标签

secondView.tableOutput.text;

编辑:

查看最初设置新选项卡式应用程序的方式,您的视图控制器可能是在AppDelegate.m文件中的代码中创建的,如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
    UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
    self.tabBarController = [[[UITabBarController alloc] init] autorelease];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}

使用与上面概述的相同的想法,只有您不需要将链接声明为IBOutlet:

@property (nonatomic, retain) SecondViewController* secondView;

然后在创建viewcontrollers时,您可以将其更改为

FirstViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
SecondViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];
viewController1.secondView = viewController2;

然后按我原来显示的那样访问标签

答案 1 :(得分:0)

对于有类似需求的其他人:

感谢Dan F,我仍然无法让我的应用程序将一个VC中的表输出传递给另一个VC。在此YouTube视频中,Connor Denman提供了一个解决方案: http://www.youtube.com/watch?v=_5cW90_aYqg

  1. 在didSelectRowAtIndexPath中获取表格输出:
  2. tableOutput.text = [NSString stringWithFormat:@“%@”,[tableArray objectAt Index:indexPath.row]];

    1. 如视频所示,在AppDelegate中定义类和字符串变量。 (例如appDelegate和myString)

    2. 将tableOutput的值分配给变量:

    3. appDelegate.myString = tableOutput.text

      1. 在另一个视图控制器的viewWillAppear例程中,使用

        titleLabel.text = appDelegate.myString

      2. 该视频显示了您需要的导入,声明,@属性和@synthesis语句。

        - 感谢Connor,以及上面的Dan,感谢他们的帮助。

        -Rob