如何从View获取数据到UITabBarController

时间:2014-04-03 09:05:36

标签: ios objective-c uitabbarcontroller getter

我有一个UITabBarController,其中有3 UIViewControllers。每个控制器都有一些UITextFields。在UItabBarController中是一个按钮&#34; save&#34;。请问,如何从UITextFields UIViewControllores获取数据?我需要来自UITextFields的所有UIViewControllers以及UITabBarController中的所有#import <UIKit/UIKit.h> #import "CoreDataHelper.h" @interface StudentVC : UIViewController <UITextFieldDelegate> @property (strong, nonatomic) NSManagedObjectID *selectedStudentID; @property (strong, nonatomic) IBOutlet UIScrollView *scrollView; @property (strong, nonatomic) IBOutlet UITextField *studentNameTextField; @end 的数据(在IBAction of save按钮中)。我该怎么做?感谢。

这是故事板上我的TabBarController的图片。

enter image description here

第一个ViewController有一个StudentVC类。该类有一个文本字段。在 StudentVC.m 中是此代码:

- (void)viewDidLoad
{
    if (debug == 1) {
        NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
    }
    [super viewDidLoad];

    StudentVC *studentVC = [self.tabBarController.viewControllers objectAtIndex:0];
    studentVC.studentNameTextField.text = @"asad";
}

studentNameTextField与Storyboard中的字段相关联。然后我有一个TabBar类,类名是StudentTBC。在文件 StudentTBC.m 中,我有以下代码:

- (IBAction)save:(id)sender {
    if (debug == 1) {
        NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
    }

    StudentVC *studentVC = [self.tabBarController.viewControllers objectAtIndex:0];
    NSString *string = studentVC.studentNameTextField.text;
    NSLog(@"string:%@", string);

所以,当我继续使用TabBar时,我会在studentNameTextField中看到文本&#34; asad&#34;,但字段很清楚...所以我也在IBAction中添加:保存此代码:

NSInteger countOfViews = [self.tabBarController.viewControllers count];
NSLog(@"count:%ld", (long)countOfViews);

但是当我插入字段并按&#34; ulozit&#34; (它保存在捷克语中),我得到一个&#34;字符串:null&#34;而不是&#34;字符串:textWhichIWriteToField&#34;。我尝试了索引0,1,2但没有任何作用。 :/

编辑3.4 15:20

我移动了我的申请。第一部分是我的故事板 - UITabBarController和3UIViewControllers。我删除了一个Navagition控制器。在第二部分,我再次做了奥特莱斯。第三部分是保存功能代码(代码可以写文本字段的内容)和TabBarController的ViewDidLoad代码(代码可以设置一个文本字符串)。最后一部分是运行应用程序(结果在console - null string和clear textfield中)。 我也试过打印这个:

{{1}}

一定是三个?要么?因为我的结果是0 ..为什么? :/

我的电影:https://www.youtube.com/watch?v=j6p__e48lLI&feature=youtu.be

EDITED 2.4 20:58 -------------------

您好。我尝试了所有选项,但没有任何工作..所以我做了一个新的SIMPLE应用程序,其中只有一个UITabBarController有两个UIViewControllers和一个UITableViewController(因为导航栏)。请下载项目并亲自试用。只运行,然后点击按钮&#34; TabBar&#34;你在UITabBarController上。当您按下“保存”按钮时,它应显示UIViewsControllers的计数和textfields的值。你可以试着告诉我出了什么问题吗?谢谢。这是项目:

https://www.dropbox.com/s/r4jlzadr2us00ad/TBC.zip

2 个答案:

答案 0 :(得分:2)

要访问其中一个文本字段,您可以使用以下代码:

- (IBAction)save {
    YourUIViewController *vc = [self.tabBarController.viewControllers objectAtIndex:indexOfController];
    NSString *str = vc.yourTextField.text;
}

EDIT。你告诉我你的控制器是如何连接的,现在我意识到你在UINavigaitonController之后得到了UIViewController。修改后的代码应如下所示:

- (IBAction)save {
    NSArray *navConArr = [self.tabBarController.viewControllers objectAtIndex:indexOfController];
    for(UINavigationController *nc in nacConArr) {
        UIViewController *vc = [nc.viewControllers objectAtIndex:0];
        NSLog(@"And your text is = %@", vc.studentNameTextField.text);
    }
}

<强>更新

我最终解决了问题... TabBarController的正确代码

- (IBAction)save {
    YourUIViewController *vc = [self.viewControllers objectAtIndex:indexOfController];
    NSString *str = vc.yourTextField.text;
}

答案 1 :(得分:0)

请检查商店 UITextFields

同时检查输出

NSLog(@&#34; StudentVC textField - %@&#34;,studentVC.studentNameTextField); in save()

如果它也是null,那么你的网点肯定存在问题。