如何从 View 获取数据到 UITabBarController
Posted
技术标签:
【中文标题】如何从 View 获取数据到 UITabBarController【英文标题】:How get data from View to UITabBarController 【发布时间】:2014-04-03 09:05:36 【问题描述】:我有一个UITabBarController
,其中有3 UIViewControllers
。每个控制器都有几个UITextFields
。在UItabBarController
中是一个“保存”按钮。请问,如何在UIViewControllores
中从UITextFields
获取数据?我需要来自UITabBarController
中所有UITextFields
和所有UIViewControllers
的数据(在保存按钮的IBAction 中)。我该怎么做?谢谢。
这是我在 Storyboard 上的 TabBarController 的图片。
第一个 ViewController 有一个 StudentVC 类。该类有一个文本字段。在 StudentVC.m 中有这段代码:
#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
studentNameTextField 与 Storyboard 中的字段相连。然后我有一个 TabBar 类,类名为 StudentTBC。在文件 StudentTBC.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";
所以,当我打开 TabBar 时,我会在 studentNameTextField 中看到文本“asad”,但该字段是明确的......所以我也在 IBAction 中添加:保存此代码:
- (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);
但是当我插入字段并按“ulozit”(它保存在捷克语中)时,我得到一个“字符串:null”而不是“字符串:textWhichIWriteToField”。我尝试了索引 0,1,2 但没有任何效果。 :/
编辑于 3.4 15:20
我移动了我的应用程序。第一部分是我的故事板 - UITabBarController 和 3UIViewControllers。我删除了一个导航控制器。在第二部分中,我再次做了一个奥特莱斯。第三部分是保存功能的代码(该代码可以写一个textfield的内容)和TabBarController的ViewDidLoad的代码(代码可以设置一个textfield的字符串)。最后一部分是运行应用程序(结果在控制台中 - 空字符串和清除文本字段)。 我也试过打印这个:
NSInteger countOfViews = [self.tabBarController.viewControllers count];
NSLog(@"count:%ld", (long)countOfViews);
必须是三个?或者?因为我的结果是 0.. 为什么? :/
我的电影:https://www.youtube.com/watch?v=j6p__e48lLI&feature=youtu.be
已编辑 2.4 20:58 --------------------
你好。我尝试了所有选项,但没有任何效果。所以我做了一个新的 SIMPLE 应用程序,其中只有一个带有两个 UIViewController 和一个 UITableViewController 的 UITabBarController(因为导航栏)。请下载项目并自己尝试。只运行,然后单击按钮“TabBar”,您就在 UITabBarController 上。当您按下保存按钮时,它应该显示 UIViewsControllers 的计数和文本字段的值。你能试着告诉我有什么问题吗?谢谢你。这是项目:
https://www.dropbox.com/s/r4jlzadr2us00ad/TBC.zip
【问题讨论】:
你必须使用segues。看看这个,应该有帮助。 ***.com/questions/16997037/… 虽然您链接到的答案是正确的,但您的描述却不是。这与 segues 完全无关。 你没有提到 TabBar 和 ViewController 之间的导航控制器。您只需要稍微修改一下代码(看看我修改后的答案) Damit..有必要使用导航控制器吗?我不知道。我是初学者,在教程中看到过。 请检查我的问题的更新。我删除了导航控制器。 【参考方案1】:要访问文本字段之一,您可以使用以下代码:
- (IBAction)save
YourUIViewController *vc = [self.tabBarController.viewControllers objectAtIndex:indexOfController];
NSString *str = vc.yourTextField.text;
编辑。你知道你的控制器是如何连接的,现在我意识到你在UIViewController
之后得到了UINavigaitonController
。修改后的代码应如下所示:
- (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;
【讨论】:
请问如何获取 viewController 索引?当我有 3 个 UIViews 时,它们有一个索引:0,1,2 与否?因为我尝试了这个索引并且 NSString 仍然为空:/. 属性 viewControllers 是一个数组。您编写的 tabBarController 包含 3 个 UIViewController(不是 UIView!),因此使用索引 0、1 和 2 您应该访问其中一个。 是的,我有 UIViewControllers 而不是 UIView。抱歉表达不好。 无论如何你的问题对我来说并不清楚。请在您的问题中添加更多代码。 我也尝试使用导航控制器和您的代码,但 NSArray navConrArr 为空。【参考方案2】:请查看 outlets 了解 UITextFields,
同时检查输出
NSLog(@"StudentVC textField -- %@",studentVC.studentNameTextField); in save()
如果它也是null,那么你的网点肯定有问题。
【讨论】:
以上是关于如何从 View 获取数据到 UITabBarController的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Swift 4将数据从Pop-Over子视图传递到View Controller