视图控制器之间传递数据 - 的iOS Xcode的 - 什么好办法?(Passing data be

2019-09-19 05:54发布

好吧,我会尽力使这个尽可能简单(我似乎在各地得到了运行在chat.stackoveflow.com当我试图问这个问题)。 我想从一个文本框文本传递一个视图控制器到另一个视图控制器。

我应该使用模型的类,并存储所述的TextField.text在模型。[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

Answer 1:

由于您使用的故事板,它更有意义使用塞格斯执行您ViewControllers之间的过渡是。 如果你不熟悉塞格斯,你可以在这里看看:

http://developer.apple.com/library/IOs/#featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomSegues/CreatingCustomSegues.html

这是非常简单的创建在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;
    }
}


Answer 2:

你不应该保持在两个方向上这两个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;
}


Answer 3:

如果你有一个.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

如果你只是想看看在塞格斯部分,我建议你到只读第2部分。



Answer 4:

我精制与SO另一个问题,可以发现这个问题在这里基本上,我创建一个单独的视图控制器之间传递数据。 我还没有到目前为止任何问题,它(敲木头)。



文章来源: Passing data between view controllers - iOS Xcode - what's a good way?