2011-12-10 52 views
4

我試圖從一個TableViewController選擇的細節公開按鈕(或一排)和原因請看到另一個TableViewController,而不從第一傳遞任何數據到所述第二TableViewController。所以幾乎第一個TableViewController充當一個表,根據所選的詳細信息披露按鈕(或行),該表將導航到不同的TableViewControllers。的iOS 5 - 從一個TableViewController Segue公司到另一個TableViewController

到目前爲止,我這樣做的代碼如下所示:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 


    NSUInteger rowNumber = [indexPath row]; 
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber]; 

    self.categoryData = [self.commuterDict objectForKey:categoryCode]; 

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

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

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) { 

     PlacesViewController *placesViewController = [segue destinationViewController]; 

     // --> I believe I'm missing something here to access a specific row? <-- 



    } 
} 

我希望有人能幫幫我! accessoryButtonTappedForRowWithIndexPath:功能

回答

2

您從indexPath TableView中得到的特定行。具體來說,被點擊的行是indexPath.row。 (如果你的表有多個部分,那麼你也可以從indexPath中讀出部分,但是這聽起來像是你正在使用一個簡單的表。)

你可以將當前行存儲在一個變量中,然後讀取它在prepareForSegue:發件人選擇去哪裏。

0

可以從視圖控制器到你想要的視圖中拖動SEGUE按詳細披露按鈕時即可顯示。你可以從你的代碼中火SEGUE從奧地利 如下

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"UpdateData" sender:self]; 
} 

乾杯馬丁

2

爲UIViewController的-prepareForSegue:sender:文檔說:

因爲塞格斯可以從多個源觸發,你可以使用在SEGUE和發件人參數 信息以定義SEGUE上下文 並傳遞適當的信息。例如,如果 的SEGUE源自表視圖,發送者參數將 識別用戶輕敲表視圖細胞。您可以使用該信息在目標視圖控制器上設置數據。

鑑於這一點,我會先看看sender參數,並期望它是指向表格單元格的指針。如果您知道單元格應放入哪個表格,則可以使用-indexPathForCell:來檢索單元格的索引路徑。

+0

你能不能只通過索引路徑作爲發件人在這種情況下? – marchinram

+0

這是正確的做法。將當前行存儲在accessoryButtonTapped方法中可能會起作用,但它要求麻煩 –

0

如果您發送的對象是tableviewcell,下面的代碼片段應該工作:

NSIndexPath *indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 

否則儘量

NSIndexPath *indexPath = nil; 
if ([sender isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:sender]; 
} 
else if ([[sender superview] isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[sender superview]]; 
} 
else if ([[[sender superview] superview] isMemberOfClass:[UITableViewCell class]]) 
{ 
    indexPath = [[[segue sourceViewController] tableView] indexPathForCell:(UITableViewCell *)[[sender superview] superview]]; 
} 
0

您在使用賽格瑞準備可以任何你想要的發件人。如果你想知道的行,發送行或索引路徑:

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 


    NSUInteger rowNumber = [indexPath row]; 
    NSString *categoryCode = [self.categoryCodes objectAtIndex:rowNumber]; 

    self.categoryData = [self.commuterDict objectForKey:categoryCode]; 

    [self performSegueWithIdentifier:@"ShowPlaces" sender:indexPath]; 
} 

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

    if ([[segue identifier] isEqualToString:@"ShowPlaces"]) { 

     PlacesViewController *placesViewController = [segue destinationViewController]; 

     // Row information is supplied as the sender 
     NSIndexPath *indexPath = sender; 


    } 
} 

如果你想用實際行,然後發送者

[self performSegueWithIdentifier:@"ShowPlaces" sender:[tableView cellForRowAtIndexPath:indexPath]]; 
相關問題