2014-02-24 93 views
0

我有一個應用程序,用戶在TableView中選擇某一行,並將該行的內容發送到下一個ViewController。在TableView中添加Segue的正確方法單元格

到目前爲止,我通過Segue將TableView Cell/Row連接到下一個ViewController。我現在面臨的問題是將所選行的值傳遞給下一個ViewController。我已經編寫了didSelectRowAtIndexPathprepareForSegue函數的代碼。

下面是函數(在ViewController.m文件中,一個與所述的TableView):

didSelectRowAtIndexPath功能:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"didSelectRowAtIndexPath entered"); 

    //itemNameList is a mutable array where I get my TableView data from 
    NSMutableString *itemName = [itemNameList objectAtIndex:indexPath.row]; 

    //selectedItem is a global mutable string I use to store the selected item to. 
    selectedItem = itemName; 
    UIAlertView *messageAlert = [[UIAlertView alloc] 
          initWithTitle:@"Row Selected" 
          message:itemName 
          delegate:nil 
          cancelButtonTitle:@"OK" 
          otherButtonTitles:nil]; 

    // Display Alert Message 
    [messageAlert show]; 
} 

prepareForSegue功能:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"prepareForSegue entered"); 

    if ([[segue identifier] isEqualToString:@"Details"]) 
    { 
     //DetailViewController is the next ViewController once the user 
     //selects an item 
     DetailViewController *detailViewController = [segue destinationViewController]; 

     //the first selectedItem is a property of the second ViewController 
     //the next selectedItem is the global mutable string 
     detailViewController.selectedItem = selectedItem; 
    } 
} 

的問題是prepareForSegue函數在didSelectRowAtIndexPath函數之前執行。這是一個巨大的問題,因爲這意味着我沒有真正將值傳遞給第二個ViewController,因爲第二個ViewController已經加載到屏幕上了。

有誰知道如何處理這個?

我的想法是以某種方式得到用戶在prepareForSegue方法中選擇的行,但我不知道該怎麼做。

回答

2

是的,你是對的。 prepareForSegue似乎在didSelectRowAtIndexPath之前執行。所以你需要在prepareForSegue中獲得選定的行。

使用方法:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow] 

prepareForSegue即可選擇行。

0

刪除您在IB的UItableViewCellViewControllerB之間進行連接,並添加ViewControllera之間的segueViewControllerB

地址:

[self performSegueWithIdentifier:@"nextVC" sender:nil]; 

didSelectRowAtIndexPath結束。

那樣prepareForSegue將在didSelectRowAtIndexPath處理完成後觸發。

0

爲賽格瑞

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

    TheNextViewController *tnvc = segue.destinationViewController; 

    NSIndexPath *indexPath = [self.tableView indexPathForCell:sender]; 
    [self tableView:self.tableView didSelectRowAtIndexPath:indexPath]; 

//then do whatever you have to do 
//eg. set property in thenextviewcontroller by tnvc.propertyname = self.. 
+0

準備發送者是細胞:) – Cescy

相關問題