2013-11-27 33 views
0

我有一張桌子。當我點擊單元格時,應該執行。我嘗試使用prepareForSegueperformSegueWithIdentifier,但沒有任何結果。 我的代碼:表格單元segue

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

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

       OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController; 
       controller.address = self.selectedCellText; 
       [self performSegueWithIdentifier:@"OpenB" sender:self]; 
      } 
    } 
     - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

      self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]; 
      [self performSegueWithIdentifier:@"OpenB" sender:self]; 
      [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
     } 
+2

刪除'[self performSegueWithIdentifier:@「OpenB」sender:self];'in' prepareForSegue' – Larme

+0

done。沒有結果 – STBY

+0

你是否通過方法編碼?任何斷點或NSLog? – Larme

回答

0

首先,你應該不叫[self performSegueWithIdentifier:@"OpenB" sender:self];-prepareForSegue:方法裏面,因爲當SEGUE即將進行-prepareForSegue被調用。

其次,檢查您是否正確安裝了您的segue。請確保您所提供的相同的標識符在故事板SEGUE您正在使用與-performSegueWithIdentifier:

+0

它不起作用。我檢查了所有的標識符,刪除[self performSegueWithIdentifier:@「OpenB」sender:self]; – STBY

+0

在調用tableview的-didSelectRow方法執行'-performSegueWithIdentifier:'後調用'-prepareForSegue:'方法嗎?也可以嘗試從storyboard中刪除segue並創建一個新的併爲其分配一個不同的標識符。還要更改您的代碼以使用該標識符。 –

+0

只調用cellForRorIndexPath函數 – STBY

0

你的代碼應該如下:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if([segue.identifier isEqualToString:@"OpenB"]){ 

     OpenBViewController *controller = (OpenBViewController *)segue.destinationViewController; 
     controller.address = self.selectedCellText; 
    } 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

    self.selectedCellText = [[[tableView cellForRowAtIndexPath:indexPath] textLabel] text]; 
    [self performSegueWithIdentifier:@"OpenB" sender:self]; 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

而且記住設置一個賽格瑞與標識符OpenB在故事板。

+0

不起作用。故事板中的segue id - OpenB – STBY

+0

你現在得到什麼錯誤? –

+0

沒有錯誤。但意見不會改變 – STBY

0

我知道這是舊的,但只是在這裏留下它以防萬一它發生在別人身上。

此外,所有的代碼都在Swift 3中,因爲我對Objective C語法的知識是在nil旁邊的。

問題是最有可能的是,didSelectRow()方法被後的SEGUE被推稱爲。所以當prepare(ForSegue)被調用時,selectedTextCell變量沒有被正確初始化。

如果您通過在Interface Builder中創建的segue從單元連接到下一個ViewController,則不需要使用didSelectRow(),並且可能不應該這樣做,因爲segue可能始終在推送之前didSelectRow()

在這種情況下,您只需從prepare()方法中的單元格中檢索信息。

簽名是:

func prepare(for segue: UIStoryboardSegue, sender: Any?) 

發件人是取其對象觸發SEGUE。在這種情況下,選中的單元格。因此,在準備(),你會寫是這樣的:

let myCell = sender as! UITableViewCell 
controller.address = myCell.textLabel.text 

如果您需要訪問的行,例如,這將是:

controller.idx = self.tableView.indexPath(for: sender as! UITableViewCell)?.row 

當然,UITableViewCell的可更換通過您可能擁有的任何自定義Cell類。