1

我是 iPhone 应用程序开发的新手。在我的代码中,在第一个 ViewController1 中,我有一个文本字段和一个确定按钮。所以在这里

  1. 当我在不输入字符串的情况下单击确定按钮时,它会显示一条警报消息。
  2. 当我输入字符串然后按确定按钮时,它应该导航到下一个 ViewController2。

当我没有将 ok 按钮连接到 Interface Builder 中的 ViewController2 时,我能够正确完成第一部分。但是当我连接时,它会导航然后显示警报消息。请告诉我在输入字符串并按确定按钮后如何以编程方式导航到 ViewController2。

这就是我的代码查找 Ok- 按钮的方式:

-(IBAction) okButton: (id) sender
{
    if([textfield.text isEqualToString:@""])
    {
        UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"Warning!!" message:@"Enter the file name" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
    }
    else if(textfield.text!= nil)
    {
        foldername1= [[NSString alloc] initWithString:[NSString stringWithString:textfield.text]];
        NSLog(@"foldername is: %@", foldername1);
    }
    ViewController2 *view2= [[ViewController2 alloc] initWithNibName:@"Next View Name" bundle:nil];
    [self.navigationController pushViewController:view2 animated:YES];
}
4

5 回答 5

3

基于 Segue 的导航:

去掉连接OK按钮到View Controller 2的segue,在View Controller 1和View Controller 2之间添加手动segue。然后实现如下代码:

-(IBAction) okButton: (id) sender
{
    if(textfield.text.length == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning!!" 
                                                        message:@"Enter the file name" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];
        [alert show];
    }
    else
    {
        foldername1 = textfield.text;
        NSLog(@"foldername is: %@", foldername1);

        [self performSegueWithIdentifier:@"segueIdentifier" sender:self];
    }
}

基于代码的导航:

-(IBAction) okButton: (id) sender
{
    if(textfield.text.length == 0)
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning!!" 
                                                        message:@"Enter the file name" 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];
        [alert show];
    }
    else
    {
        foldername1 = textfield.text;
        NSLog(@"foldername is: %@", foldername1);

        ViewController2 *view2 = [[ViewController2 alloc] initWithNibName:@"Next View Name"
                                                                   bundle:nil];
        [self.navigationController pushViewController:view2 animated:YES];
    }
}

这假设您正在使用 ARC,这foldername1是一个强大的 ivar / 属性。

于 2013-08-23T12:00:18.800 回答
1

如果您为按钮分配 segue,那么您不应该给它一个点击处理程序。只需从按钮中删除 segue,代码应该没问题,因为您使用pushViewController:animated:的是导航而不是使用 segue 导航。

通常你会创建一个从视图控制器 1 到 viwe 控制器 2 的 segue,用标识符命名它,然后使用performSegueWithIdentifier:sender:方法在代码中激活它。像这样:

[self performSegueWithIdentifier:@"selectedIdentifierForTheSegue" sender:self];

有关更多信息,这是一个很好的导航实现教程:http: //www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/

于 2013-08-23T11:55:34.727 回答
0

只是减记

return;

下面[警报显示];行然后它只显示一个警报而不导航到下一个视图。

于 2013-08-23T12:01:03.517 回答
0

尝试这个

(IBAction) okButton: (id) sender
{
if(textfield.text.length==0)
{
    UIAlertView *alert= [[UIAlertView alloc] initWithTitle:@"Warning!!" message:@"Enter the file name" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
}
else if(textfield.text.length!=0)
{
foldername1= [[NSString alloc] initWithString:[NSString stringWithString:textfield.text]];
NSLog(@"foldername is: %@", foldername1);
}
ViewController2 *view2= [[ViewController2 alloc] initWithNibName:@"Next View Name" bundle:nil];
    [self.navigationController pushViewController:view2 animated:YES];
}
于 2013-08-23T12:03:54.290 回答
0

推送视图控制器:

ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" 
                                                             bundle:nil];
    [self.navigationController pushViewController:vc2 animated:YES];

并且还要检查这个

于 2013-08-23T12:06:41.327 回答