我有以下代码,如果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.
}
}
答案 0 :(得分:0)
您可以使用NSArray
或NSDictionary
:
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。
然后,您需要实现两种方法shouldPerformSegueWithIdentifier
和prepareForSegueWithIdentifier
。第一个用于验证数据,第二个用于将数据传递给下一个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;
}
}