好吧,我会尽量让这个变得简单(当我试着问这个问题时,我好像在chat.stackoveflow.com上跑来跑去)。我想将文本从一个viewcontroller中的textfield传递给另一个viewcontroller。
我应该使用 Model 类并将textfield.text存储在Model。[h / m]文件中,然后让第二个视图控制器访问存储在模型中的数据吗?
基本上这就是我所拥有的,
ViewControllerWelcome.h
@interface ViewControllerWelcome : UIViewController { }
@property (weak, nonatomic) IBOutlet UITextField *textFieldUsername;
ViewControllerWelcome.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
ViewControllerHome *home = (ViewControllerHome *)[storyboard instantiateViewControllerWithIdentifier:@"Home"];
NSString *username = _textFieldUsername.text;
home.lblUSERNAME.text=username;
[self presentModalViewController:home animated:YES];
ViewControllerHome.h
@interface ViewControllerHome : UIViewController {
NSString *username;
UILabel *lblUSERNAME;
}
@property (weak, nonatomic) IBOutlet UILabel *lblUSERNAME;
ViewControllerHome.m
- (void)changeUSERNAME {
// get username from welcome tf
ViewControllerWelcome *welcome = [[ViewControllerWelcome alloc] init];
welcome.username = [self lblUSERNAME.text];
// _lblUSERNAME.text = welcome._textFieldUsername.text;
//welcome.textFieldUsername.text = _username;
// username = welcome.textFieldUsername.text;
NSLog(@"username = %@",username);
// welcome.textFieldUsername.text = _lblUSERNAME.text;
// NSLog(@"username = %@",welcome.textFieldUsername.text);
}
正如您所看到的,我尝试了几种不同的方法,但无法找到可行的解决方案:-l
答案 0 :(得分:6)
由于您正在使用Storyboard,因此使用Segues在ViewControllers之间执行转换更有意义。如果您不熟悉segues,可以在这里查看:
在IB中创建segue非常简单。一旦你有了这个设置,你就实现了
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
并配置目标视图控制器。所以你会得到类似的东西。
-(void)prepareForSegue(UIStoryboardSegue *)segue sender:(id)sender{
// Assume you have a viewHomeSegue defined that has the name of the segue you want to perform
NSString * segueIdentifier = [segue identifier];
if([segueIdentifier isEqualToString:viewHomeSegue]){
ViewControllerHome * homeController = (ViewControllerHome *)[segue destinationViewController];
homeController.lblUSERNAME.text = _textFieldUsername.text;
}
}
答案 1 :(得分:0)
您不应该在两个方向上保持这两个ViewControllers之间的强引用。例如,您可以做的是在ViewControllerWelcome
中声明一个带有委托的协议。您可以让ViewControllerHome
实例化另一个控制器,然后成为其委托,一旦用户输入用户名,就会收到通知。
@protocol ViewControllerWelcomeDelegate <NSObject>
- (void) userNameEntered:(NSString *)userName;
@end
@interface ViewControllerWelcome : UIViewController
@property (nonatomic, weak) id <ViewControllerWelcomeDelegate> delegate;
...
@end
在@implementation中:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
[theTextField resignFirstResponder];
[delegate userNameEntered:theTextField.text];
return YES;
}
答案 2 :(得分:0)
如果您有.storyboard文件,则可以在界面中布局视图,就像使用界面构建器一样。
这个文件第一次真的帮助了我:
第1部分:http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1
第2部分:http://www.raywenderlich.com/5191/beginning-storyboards-in-ios-5-part-2
如果您只想查看segues部分,我建议您只阅读第2部分。
答案 3 :(得分:0)
我用另一个关于SO的问题改进了这个问题here基本上,我创建了一个单例来在视图控制器之间传递数据。到目前为止,我没有任何问题(敲木头)。