使用参数从内部函数触发segues

时间:2014-09-12 13:19:09

标签: ios

我有以下代码,如果if语句的条件有效,我试图触发segue转换。我还想将3个变量值(fullname,year,country)传递给下一个视图。单击按钮时会触发以下操作。请告知如何执行此操作:

-(IBAction)checkInputAndProceed:(id)sender{
    NSString *fullname = [self.fullnameTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSString *year = [self.yearTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    NSString *country = [self.countriesTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

    if(fullname.length == 0) {
      self.fullnameError.text = @"Please fill your name";
    }else{
      self.fullnameError.text = @"";
    }

    if(year.length == 0) {
      self.yearError.text = @"Please fill your birth year";
    }else{
        self.yearError.text = @"";
    }

    if(country.length == 0) {
     self.countryError.text = @"Please select your country";
    }else{
        self.countryError.text = @"";
    }

    if((country.length != 0 && year.length != 0 && fullname.length != 0))
    {
        //Proceed to next view with data stored transferred via segue.

    }

}

2 个答案:

答案 0 :(得分:0)

您可以使用NSArrayNSDictionary

NSArray示例:

[self performSegueWithIdentifier:@"goToNextVC" sender:@[[country text], [year text], [fullname text]]];

prepareForSegue:sender:

if ([[segue identifier] isEqualToString:@"GoToNextVC"])
{
    NSArray *data = (NSArray *)sender;
    NSString *country = [data objectAtIndex:0];
    NSString *year = [data objectAtIndex:1];
    NSString *fullName = [data objectAtIndex:2];
}

NSDictionary示例:

[self performSegueWithIdentifier:@"goToNextVC" sender:@{@"Country":[country text], @"Year":[year text], @"FullName":[fullname text]}];

prepareForSegue:sender:

if ([[segue identifier] isEqualToString:@"GoToNextVC"])
{
    NSDictionary *data = (NSDictionary *)sender;
    NSString *country = [data objectForKey:@"Country"];
    NSString *year = [data objectForKey:@"Year"];
    NSString *fullName = [data objectForKey:@"FullName"];
}

但是,由于您已经在测试中进行了检查(修剪后的长度),为什么不直接在prepareForSegue:sender:

if ([[segue identifier] isEqualToString:@"GoToNextVC"])
{
    NSString *country = [self.countriesTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSString *year = [self.yearTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSString *fullName = [self.fullnameTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}

答案 1 :(得分:0)

您实际上可以取消IBAction方法,只需直接从故事板中的按钮触发segue。

然后,您需要实现两种方法shouldPerformSegueWithIdentifierprepareForSegueWithIdentifier。第一个用于验证数据,第二个用于将数据传递给下一个VC。你不能用一种方法来做。

假设你的segue标识符是'nextSegue',那么你会有类似的东西 -

    - (BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier {

       BOOL ret=YES;

       if ([identifier isEqualToString:@"nextSegue"]) {

          self.fullnameTextfield.text = [self.fullnameTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

          self.yearTextfield.text = [self.yearTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

          self.countriesTextfield.text = [self.countriesTextfield.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

         if (self.fullnameTextfield.text.length == 0) {
            self.fullnameError.text = @"Please fill your name";
            ret=NO;
         } else{
            self.fullnameError.text = @"";
         }

         if (self.yearTextfield.text.length == 0) {
            self.yearError.text = @"Please fill your birth year";
            ret=NO;
         } else{
            self.yearError.text = @"";

         if(self.countriesTextfield.text.length == 0) {
            self.countryError.text = @"Please select your country";
            ret=NO;
         } else{
           self.countryError.text = @"";
         }
      }

       return ret;
    }

    -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

       if ([segue.identifer isEqualToString:@"nextSegue"]) {
           MyNextVC *nextVC=(MyNextVC *)segue.destinationViewController;
           nextVC.fullname=self.fullnameTextfield.text;
           nextVC.year=self.yearTextField.text;
           nextVC.country=self.countriesTextField.text;
       }
    }