2014-03-06 26 views
-1

我使用的是故事板的項目。問題是它不能推到Function1DetailViewController.Moreover,因爲tableview沒有內部的單元格,我不知道如何繪製segue之間的鏈接兩個視圖控制器。另外,我不知道如何編寫prepareForSegue方法。iOS7中的prepareForSegue方法

我是否還需要在didSelectRowAtIndexPath方法中進行一些更改?

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 
    NSString *tempSqlStatement = @""; 
    NSString *tempString = @"%"; 
    databaseName = @"TCMdb8.sql"; 
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains 
    (NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [documentPaths objectAtIndex:0]; 
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
    if (buttonNum == 0) { 
     Function1DetailViewController *function1DetailViewController = [[Function1DetailViewController alloc] initWithKey:[listOfItems objectAtIndex:indexPath.row] type:@"1"]; 
     [self.navigationController pushViewController:function1DetailViewController animated:YES]; 
    } else if (buttonNum != 0){ 
     if (buttonNum == 1) { 
      tempSqlStatement = [NSString stringWithFormat:@"select name from Medicine where stroke ='%@' ORDER BY length(name) ASC", [listOfItems objectAtIndex:indexPath.row]]; 
     } 
     function1SQLStatement = [tempSqlStatement UTF8String]; 
     [self checkAndCreateDatabase]; 
     [self readFromDatabase]; 
     [tableList reloadData]; 
     buttonNum = 0; 
    } 
} 

回答

1

這裏有不同的方式來創建塞格斯:

1 - 從小區到細節控制器:

From Cell To detail Controller


2 - 使用連接檢查員

Using Connection Inspector


3 - 從視圖控制器視圖控制器

Kill it with MOAR fire!


  • #1#3則需要前舉行控制 拖動。
  • #2 & #3: 你需要給出一個標識符您SEGUE,不像#1你必須使用代碼performe的SEGUE:

添加標識:

enter image description here

執行SEGUE:

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

現在,這是事情,這將只是執行segue,如果你需要傳遞一些數據到視圖控制器。然後,你必須實現以下SEGUE deleguate:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Make sure your segue name in storyboard is the same as this line 
    if ([[segue identifier] isEqualToString:@"Function1Segue"]) 
    { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     // Get reference to Function1DetailViewController 
     Function1DetailViewController *functionVC = 
       (Function1DetailViewController *)segue.destinationViewController; 
     functionVC.item = [listOfItems objectAtIndex:indexPath.row] type:@"1"]; 
    } 
} 

functionVC.item,因爲你必須要在Function1DetailViewController設置屬性稱爲項目。

+0

prepareForSegue方法中的一些錯誤。它是'使用未聲明的標識符'indexPath'。你的意思是'NSIndexPath'?' – user2914810

+0

仔細閱讀我的答案!你需要標識符! http://i.stack.imgur.com/OJ7aJ.png :) – meda

+0

我的意思是代碼'functionVC.item = [listOfItems objectAtIndex:indexPath.row] type:@「1」];'得到這個錯誤 – user2914810

0

選擇視圖控制器圖標(源視圖控制器下方的黃色)並將其拖動到目標視圖控制器。你可以通過程序調用它。

1

您可以在故事板中的兩個視圖控制器之間繪製一個segue。選擇整個視圖控制器(最好點擊狀態欄的位置),按住ctrl拖動到另一個。給這個新的segue一個標識符。

如果要觸發它的視圖控制器:

[self performSegueWithIdentifier:@"TheIdentifierYouPutInIB"]; 

您可以在didSelectRowAtIndexPath方法與上面的更換導航邏輯。 See here for prepare for segue example.

+0

我需要編寫prepareForSegue方法嗎? – user2914810

+0

實現prepareForSegue的常見原因是目標視圖控制器需要一些屬性集,通常是選擇觸發segue的模型部分。您標記爲正確的答案在準備segue時省略了一行代碼:NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow];這個想法是,在我們去目的地視圖控制器的路上,找出用戶選擇讓我們去那裏的東西,在我們的模型中查看該項目(支持該表格的相同陣列),並告訴目標vc哪個模型項目處理。 – danh

+0

但是我添加'NSIndexPath * indexPath = [self.tableView indexPathForSelectedRow]; 」。它仍然有錯誤:在'Function1ViewController'類型的對象和'沒有已知的選擇器實例方法'類型'上找不到'屬性'tableview'。 – user2914810