2013-08-23 101 views
1

我是iPhone應用程序開發新手。在我的代碼中,在第一個ViewController1中,我有一個文本框和一個OK按鈕。所以這裏如何在按下按鈕時以編程方式導航到下一個ViewController?

  1. 當我點擊ok按鈕而不輸入字符串,它會顯示一條警告消息。
  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]; 
} 
+0

是你的應用程序有導航控制器 – Balu

+0

不,我不使用。 – vanya

+0

你需要從你的按鈕中刪除segue。看看我的答案中的解釋。 – allprog

回答

1

如果您分配一個原因請看一個按鈕,那麼你不應該給它一個點擊處理程序。只需從按鈕中移除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/

3

基於Segue公司導航:

取出SEGUE連接OK按鈕視圖控制器2在視圖控制器1和視圖控制器2之間添加手動輪詢。然後執行以下代碼:

-(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]; 
    } 
} 
基於代碼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 
    { 
     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是一個強大的伊娃/屬性。

+0

你能告訴我如何將ViewController1作爲UIAlertView的委託,因爲我在這個領域是新的? – vanya

+0

對不起,但這不會有幫助。按鈕上有兩個動作:點擊和繼續。無論你在點擊處理程序中做什麼,segue都會發生。 – allprog

+0

這是做到這一點的最佳答案和正確方法。 要分配ViewController1作爲UIAlertView中的代表......在你的界面(.h)中只需添加像這樣: ViewController1:的UIViewController 然後,你宣佈你alertView還補充:alert.delegate =自。現在你的ViewController將能夠捕獲上述鏈接中描述的UIAlertView委託方法。 –

0

只是減記

return; 

下面[警報顯示];那麼它只會顯示一條警報,而不會導航到下一個視圖。

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]; 
} 
+0

好的。你能告訴我,如果我必須手動連接Ok-按鈕到下一個ViewController2或不需要它? – vanya

0

要推視圖控制器:

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

而且還要檢查this

相關問題